diff --git a/precompiles/Precompiles.sol b/precompiles/Precompiles.sol index 3aea2bc37..76da39f79 100644 --- a/precompiles/Precompiles.sol +++ b/precompiles/Precompiles.sol @@ -25,11 +25,11 @@ contract Precompiles { //////////////////////////////////////////////////////////////////////////*/ bytes public constant BYTECODE_LOCKUP_DYNAMIC = - hex"60c034620003dc576001600160401b0390601f601f1962005b303881900383810183168501919086831186841017620002f557808692606094604052833981010312620003dc5782516001600160a01b038082169590929091869003620003dc5760209485810151938416809403620003dc57604001519362000081620003e1565b95601d87527f5361626c696572205632204c6f636b75702044796e616d6963204e465400000081880152620000b5620003e1565b90601182527029a0a116ab1916a627a1a5aaa816a22ca760791b81830152306080528751858111620002f5576001988954908a82811c92168015620003d1575b84831014620002d45781868493116200037b575b50839086831160011462000317576000926200030b575b5050600019600383901b1c191690891b1788555b8151948511620002f557600254938885811c95168015620002ea575b82861014620002d457848487961162000277575b50819385116001146200020d57505060009262000201575b5050600019600383901b1c191690841b176002555b60018060a01b03198481600054161760005560085416176008556040519260007fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a360a05260075561572e908162000402823960805181613acb015260a051818181610cdb0152613b8c0152f35b0151905038806200017c565b88959392919316600260005283600020936000905b8282106200025d575050841162000243575b505050811b0160025562000191565b015160001960f88460031b161c1916905538808062000234565b8484015186558a9790950194938401939081019062000222565b9091929394506002600052826000208580880160051c820192858910620002ca575b9188978c9297969594930160051c01915b828110620002ba57505062000164565b600081558897508b9101620002aa565b9250819262000299565b634e487b7160e01b600052602260045260246000fd5b94607f169462000150565b634e487b7160e01b600052604160045260246000fd5b01519050388062000120565b90878c94169184600052856000209260005b878282106200036457505084116200034a575b505050811b01885562000134565b015160001960f88460031b161c191690553880806200033c565b8385015186558f9790950194938401930162000329565b9091508a600052836000208680850160051c820192868610620003c7575b918d91869594930160051c01915b828110620003b757505062000109565b600081558594508d9101620003a7565b9250819262000399565b91607f1691620000f5565b600080fd5b60408051919082016001600160401b03811183821017620002f55760405256fe6080806040526004908136101561001557600080fd5b60003560e01c90816301ffc9a7146127a657508063027b67441461278357806306fdde03146126bb578063081812fc1461269d578063095ea7b3146125965780631400ecec146124f05780631c1cdd4c1461248a5780631e99d5691461246c57806323b872dd1461245557806331df3d481461234957806340e58ee514612048578063425d30dd14611ff257806342842e0e14611fa157806342966c6814611d8f5780634426757014611d685780634857501f14611cee5780634869e12d14611cb15780634cc55e1114611bb657806354c022921461191a5780636352211e146118eb5780636d0cee75146118eb57806370a082311461187b57806375829def146117e15780637cad6cd1146116e35780637de6b1db146114c65780638659c2701461116f578063894e9a0d14610dee5780638f69b99314610d535780639067b67714610cfe5780639188ec8414610cc357806395d89b4114610bb2578063a22cb46514610af4578063a80fc07114610a9d578063ad35efd414610a24578063b2564569146109ce578063b637b8651461096f578063b88d4fde146108e6578063b8a3be66146108b0578063b971302a1461085c578063bc2be1be14610807578063c156a11d146106b1578063c87b56dd1461059d578063cc364f4814610501578063d4dbd20b146104aa578063d511609f14610459578063d975dfed1461040b578063e985e9c5146103b4578063ea5ead1914610386578063eac8f5b81461032f578063f590c176146102ca578063f851a440146102a35763fdd46d601461025d57600080fd5b3461029e57606036600319011261029e576102766128d2565b604435906001600160801b038216820361029e5761029c92610296613ac1565b356134b3565b005b600080fd5b3461029e57600036600319011261029e5760206001600160a01b0360005416604051908152f35b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a57506000526009602052602060406000205460f81c6040519015158152f35b6024916040519162b8e7e760e51b8352820152fd5b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a5750600052600960205260206001600160a01b0360016040600020015416604051908152f35b503461029e57604036600319011261029e5761029c90356103a56128d2565b6103ae826142bc565b91613108565b3461029e57604036600319011261029e576103cd6128bc565b6103d56128d2565b906001600160a01b03809116600052600660205260406000209116600052602052602060ff604060002054166040519015158152f35b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a576020610448836142bc565b6001600160801b0360405191168152f35b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a57506000526009602052602060026040600020015460801c604051908152f35b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a5750600052600960205260206001600160801b0360036040600020015416604051908152f35b503461029e57602036600319011261029e578035906000602060405161052681612a22565b828152015281600052600960205260ff60016040600020015460a81c161561031a575060005260096020526040806000205464ffffffffff82519161056a83612a22565b818160a01c16835260c81c16602082015261059b825180926020908164ffffffffff91828151168552015116910152565bf35b503461029e5760208060031936011261029e57600082356105bd81613842565b5060446001600160a01b03600854169460405195869384927fe9dc6375000000000000000000000000000000000000000000000000000000008452309084015260248301525afa9182156106a55760009261062c575b50610628604051928284938452830190612897565b0390f35b9091503d806000833e61063f8183612a6f565b810190828183031261029e5780519067ffffffffffffffff821161029e570181601f8201121561029e57805161067481612a91565b926106826040519485612a6f565b81845284828401011161029e5761069e91848085019101612874565b9038610613565b6040513d6000823e3d90fd5b503461029e57604036600319011261029e578035906106ce6128d2565b916106d7613ac1565b80600052600960205260ff60016040600020015460a81c16156107f1578060005260036020526001600160a01b038060406000205416938433036107ce5761071e836142bc565b6001600160801b0381166107bd575b50818116156107a557826107409161397c565b9081168061075f576024848460405191637e27328960e01b8352820152fd5b840361076757005b6107a1916040519485946364283d7b60e01b865285019193929060409160608401956001600160a01b038093168552602085015216910152565b0390fd5b602484600060405191633250574960e11b8352820152fd5b6107c8908685613108565b3861072d565b50506040805163216caf0d60e01b81529283019182523360208301528291010390fd5b602492506040519162b8e7e760e51b8352820152fd5b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a57506000526009602052602064ffffffffff60406000205460a01c16604051908152f35b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a5750600052600960205260206001600160a01b0360406000205416604051908152f35b503461029e57602036600319011261029e57356000526009602052602060ff60016040600020015460a81c166040519015158152f35b503461029e57608036600319011261029e576109006128bc565b6109086128d2565b906064359267ffffffffffffffff841161029e573660238501121561029e578301359161093483612a91565b926109426040519485612a6f565b808452366024828701011161029e57602081600092602461029c9801838801378501015260443591612f94565b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a5750600052600a6020526106286109ba6040600020612f04565b604051918291602083526020830190612962565b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a57506000526009602052602060ff60016040600020015460b01c166040519015158152f35b503461029e57602036600319011261029e57803580600052600960205260ff60016040600020015460a81c1615610a8857610a5e906138f5565b604051906005811015610a7357602092508152f35b602183634e487b7160e01b6000525260246000fd5b60405162b8e7e760e51b815291820152602490fd5b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a5750600052600960205260206001600160801b0360026040600020015416604051908152f35b503461029e57604036600319011261029e57610b0e6128bc565b6024359081151580920361029e576001600160a01b0316918215610b825750336000526006602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60249083604051917f5b08ba18000000000000000000000000000000000000000000000000000000008352820152fd5b503461029e57600036600319011261029e576040519060006002549060018260011c92600181168015610cb9575b6020958686108214610ca457508487528693929186908215610c84575050600114610c27575b50610c1392500383612a6f565b610628604051928284938452830190612897565b84915060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace906000915b858310610c6c575050610c13935082010138610c06565b80548389018501528794508693909201918101610c55565b60ff191685820152610c1395151560051b8501019250389150610c069050565b602290634e487b7160e01b6000525260246000fd5b93607f1693610be0565b3461029e57600036600319011261029e5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a57506000526009602052602064ffffffffff60406000205460c81c16604051908152f35b503461029e57602036600319011261029e57803580600052600960205260ff60016040600020015460a81c1615610a8857610d8d906138f5565b9060058210159081610dcb5760028314918215610de0575b8215610db9575b6020836040519015158152f35b909150610dcb57602091143880610dac565b602190634e487b7160e01b6000525260246000fd5b506003831491506000610da5565b503461029e57602036600319011261029e57604051610160810181811067ffffffffffffffff82111761115a576060916101409160405260008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e08201526000610100820152610e69612eb1565b61012082015201528035600052600960205260ff60016040600020015460a81c16156111425780356000526009602052604060002090610f39600260405193610eb185612a52565b80546001600160a01b038116865264ffffffffff8160a01c16602087015264ffffffffff8160c81c16604087015260ff8160f01c161515606087015260f81c1515608086015260ff60018201546001600160a01b03811660a0880152818160a01c16151560c0880152818160a81c16151560e088015260b01c16151561010086015201612ed0565b610120830152610f4981356138f5565b600581101561112d57600214611121575b6101208201516001600160a01b0360a08401511664ffffffffff604085015116606085015115159061010086015115159260c087015115159160e08801511515936001600160a01b03895116918835600052600a602052604060002099608064ffffffffff6020830151169101511515936040519a8b67ffffffffffffffff61016082818101109201111761110c57506101608b016040908152908b5260208b01919091528901526060880152608087015260a086015260c085015260e08401526101008301526101208201526101409161103490612f04565b82820152610628604051928392602084526001600160a01b03815116602085015264ffffffffff602082015116604085015264ffffffffff60408201511660608501526060810151151560808501526080810151151560a08501526001600160a01b0360a08201511660c085015260c0810151151560e085015260e08101511515610100850152610100810151151561012085015261012081015160406001600160801b039182815116858801528260208201511661016088015201511661018085015201516101a0808401526101c0830190612962565b604190634e487b7160e01b6000525260246000fd5b60006060830152610f5a565b602182634e487b7160e01b6000525260246000fd5b6024906040519062b8e7e760e51b8252803590820152fd5b604183634e487b7160e01b6000525260246000fd5b503461029e576020908160031936011261029e57803567ffffffffffffffff811161029e576111a19036908301612931565b90926111ab613ac1565b6000915b8083106111b857005b6111c3838287612e56565b35926111cd613ac1565b8360005260099081845260ff60019080826040600020015460a81c16156114b057866000528386526040600020818382015460a01c16600014611221576024898960405191634a5541ef60e01b8352820152fd5b96909192939495965460f81c611499576112518160005260096020526001600160a01b0360406000205416331490565b156114775761125f8161387d565b94816000528088526112776002604060002001612ed0565b956001600160801b03938488511685831610156114605783600052828a5260406000205460f01c16156114495780848a6112b76112c194838c5116612ae5565b9901511690612ae5565b95826000528189528860406000207f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa50815499600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c161783558781169a8b15611430575b600380940198861698896fffffffffffffffffffffffffffffffff198254161790556001600160a01b03809116998a9486528160406000205416978896526040600020015416946113798985886146fa565b604080518981526001600160801b0392831660208201529290911690820152606090a47ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce788604051848152a1803b6113dc575b50505050600191500191906111af565b803b1561029e578860006084926001988296604051988997889663c6f5ed0f60e01b88528701526024860152604485015260648401525af1611421575b8080806113cc565b61142a90612a3e565b38611419565b898401600160a01b60ff60a01b19825416179055611327565b60248a84604051916339c6dc7360e21b8352820152fd5b60248b85604051916322cad1af60e11b8352820152fd5b6040805163216caf0d60e01b8152808a01928352336020840152918291010390fd5b876024916040519163fe19f19f60e01b8352820152fd5b602488886040519162b8e7e760e51b8352820152fd5b503461029e576020908160031936011261029e5780356114e4613ac1565b806000526009835260ff60016040600020015460a81c16156107f157611509816138f5565b926005841015610a7357838303611531576024838360405191634a5541ef60e01b8352820152fd5b6003840361155057602483836040519163fe19f19f60e01b8352820152fd5b90600284146116cc576115798160005260096020526001600160a01b0360406000205416331490565b156116aa57806000526009825260ff60406000205460f01c1615611693578060005260098252604060002060ff60f01b198154169055604051817f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f600080a2600383526001600160a01b036040600020541693843b61161f575b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78484604051908152a1005b843b1561029e578160248160007ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7988782967f450154640000000000000000000000000000000000000000000000000000000085528401525af1611684575b806115f3565b61168d90612a3e565b8361167e565b82602491604051916339c6dc7360e21b8352820152fd5b6040805163216caf0d60e01b8152938401918252336020830152839250010390fd5b82602491604051916322cad1af60e11b8352820152fd5b503461029e57602036600319011261029e5780356001600160a01b039081811680910361029e5781600054163381036117b5575060085491816001600160a01b03198416176008556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a26007546000198101919082116117a0577f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c604083815190600182526020820152a1005b601190634e487b7160e01b6000525260246000fd5b604080516331b339a960e21b81526001600160a01b039092168286019081523360208201528291010390fd5b503461029e57602036600319011261029e576117fb6128bc565b600054906001600160a01b039081831633810361184f57506001600160a01b03199350169182911617600055337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf80600080a3005b604080516331b339a960e21b81526001600160a01b039092168287019081523360208201528291010390fd5b503461029e57602036600319011261029e576001600160a01b0361189d6128bc565b1680156118ba576000526020526020604060002054604051908152f35b6024826000604051917f89c62b64000000000000000000000000000000000000000000000000000000008352820152fd5b503461029e57602036600319011261029e5761190960209135613842565b6001600160a01b0360405191168152f35b503461029e5760209060031990828236011261029e5780359167ffffffffffffffff9081841161029e576101208436039182011261029e5761195a613ac1565b60c4840135906022190181121561029e578301828101359082821161029e57602401606082023603811361029e57611993913691612d87565b92835192816119a185612d6f565b946119af6040519687612a6f565b808652601f196119be82612d6f565b018860005b828110611b985750505064ffffffffff90814216956001600160801b0398896119eb82613b1d565b515116828c6119f984613b1d565b5101511685806040611a0a86613b1d565b510151168b01169060405192611a1f84612a06565b83528d8301526040820152611a338a613b1d565b52611a3d89613b1d565b5060019360015b8c8b8d878410611b0957908c8a611a5c818e01612e90565b92611a6960248301612e90565b92611a7660448401612e7c565b946064840135946001600160a01b039586811680910361029e57611b0198611ac198611af698611aa860848a01612ea4565b9481611ab660a48c01612ea4565b976040519d8e6129d3565b168c52168c8b0152166040890152606088015215156080870152151560a086015260c085015260e084015260e4369101612e27565b610100820152613b3e565b604051908152f35b8899509084806040611b468a87611b368c9d9e9f9b9c99988b90611b2d828d613b2a565b5151169a613b2a565b5101511694600019890190613b2a565b51015116816040611b57888c613b2a565b5101511601169160405193611b6b85612a06565b84528301526040820152611b7f828d613b2a565b52611b8a818c613b2a565b500190879594939291611a44565b9091929350611ba5612eb1565b82828a0101520190888593926119c3565b503461029e57604036600319011261029e5767ffffffffffffffff90803582811161029e57611be89036908301612931565b9260243590811161029e57611c009036908401612931565b919092611c0b613ac1565b828503611c7b575060005b848110611c1f57005b80611c75611c306001938886612e56565b35611c3c838987612e56565b3560005260036020526001600160a01b0360406000205416611c67611c6285898b612e56565b612e7c565b91611c70613ac1565b6134b3565b01611c16565b6044908386604051927faec934400000000000000000000000000000000000000000000000000000000084528301526024820152fd5b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a57602061044883614754565b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a57600090611d2c836138f5565b906005821015610dcb5750600203611d4c575b6020906040519015158152f35b506000526009602052602060ff60406000205460f01c16611d3f565b3461029e57600036600319011261029e5760206001600160a01b0360085416604051908152f35b503461029e576020908160031936011261029e57803591611dae613ac1565b826000526009815260ff60016040600020015460a81c1615611f8b57826000526009815260ff60016040600020015460a01c1615611f5b57611def83614223565b15611f375782600052600381526001600160a01b0380604060002054166009835260ff60016040600020015460b01c16159081611f2d575b5080611f25575b611f0e577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790846000526003835260406000205416918215928315611ed4575b856000526003825260406000206001600160a01b03198154169055856000604051927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4858152a1611ebe57005b60249160405191637e27328960e01b8352820152fd5b611ef586600052600560205260406000206001600160a01b03198154169055565b8060005284825260406000206000198154019055611e6e565b6024838560405191630da9b01360e01b8352820152fd5b506000611e2e565b9050151538611e27565b506040805163216caf0d60e01b815291820192835233602084015290918291010390fd5b50602491604051917f817cd639000000000000000000000000000000000000000000000000000000008352820152fd5b506024916040519162b8e7e760e51b8352820152fd5b503461029e57611fb0366128fc565b90604051926020840184811067ffffffffffffffff821117611fdd5761029c955060405260008452612f94565b604186634e487b7160e01b6000525260246000fd5b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a57506000526009602052602060ff60016040600020015460a01c166040519015158152f35b503461029e576020908160031936011261029e578035612066613ac1565b80600052600980845260ff60016040600020015460a81c16156123335781600052808452604060002060ff600182015460a01c166000146120b8576024848460405191634a5541ef60e01b8352820152fd5b5460f81c61231c576120e08260005260096020526001600160a01b0360406000205416331490565b156122fa576120ee8261387d565b92826000528185526121066002604060002001612ed0565b936001600160801b03908186511682821610156122e3578460005283875260ff60406000205460f01c16156122cc578661219582847f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa509a61218b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce796838d5116612ae5565b9a01511690612ae5565b86600052858252604060002095865498600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b1617885560038684169889156122b2575b0195811695866fffffffffffffffffffffffffffffffff198254161790556001600160a01b03809a169a8b91600386528a61225c8d604060002054169d8e96895260016040600020015416966122328b878a6146fa565b60405193849384916040919493606084019584526001600160801b03809216602085015216910152565b0390a4604051868152a1843b61226e57005b843b1561029e576000946084938692604051988997889663c6f5ed0f60e01b88528701526024860152604485015260648401525af16122a957005b61029c90612a3e565b60018101600160a01b60ff60a01b198254161790556121db565b60248386604051916339c6dc7360e21b8352820152fd5b60248386604051916322cad1af60e11b8352820152fd5b506040805163216caf0d60e01b81529283019182523360208301528291010390fd5b602483836040519163fe19f19f60e01b8352820152fd5b602483836040519162b8e7e760e51b8352820152fd5b503461029e576003199060203683011261029e5780359167ffffffffffffffff9081841161029e5761014090843603011261029e57612386613ac1565b60405190612393826129d3565b61239e8484016128e8565b82526123ac602485016128e8565b60208301526123bd60448501612aad565b604083015260648401356001600160a01b038116810361029e5760608301526123e8608485016129c6565b60808301526123f960a485016129c6565b60a083015261240a60c48501612d5d565b60c083015260e484013590811161029e578301913660238401121561029e57602093612445611af692611b0195602436928201359101612d87565b60e0840152610104369101612e27565b3461029e5761029c612466366128fc565b91612b14565b3461029e57600036600319011261029e576020600754604051908152f35b503461029e57602036600319011261029e57803580600052600960205260ff60016040600020015460a81c1615610a88576124c4906138f5565b906005821015610dcb57602082158381156124e5575b506040519015158152f35b6001915014826124da565b503461029e57602036600319011261029e5780359081600052600960205260ff60016040600020015460a81c161561031a576020826000908060005260098352604060002060ff815460f01c1680612584575b61255b575b50506001600160801b0360405191168152f35b61257d92506001600160801b036002612577920154169161387d565b90612ae5565b8280612548565b5060ff600182015460a01c1615612543565b503461029e57604036600319011261029e576125b06128bc565b90602435906125be82613842565b903315158061268a575b8061265c575b61262b575081906001600160a01b03809416938491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a460005260056020526040600020906001600160a01b0319825416179055600080f35b602490604051907fa9fbf51f0000000000000000000000000000000000000000000000000000000082523390820152fd5b506001600160a01b038216600052600660205260406000203360005260205260ff60406000205416156125ce565b50336001600160a01b03831614156125c8565b503461029e57602036600319011261029e5761190960209135612ac1565b503461029e57600036600319011261029e57604051906000600190600154918260011c92600181168015612779575b6020958686108214610ca457508487528693929186908215610c8457505060011461271c5750610c1392500383612a6f565b84915060016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6906000915b858310612761575050610c13935082010138610c06565b8054838901850152879450869390920191810161274a565b93607f16936126ea565b3461029e57600036600319011261029e57602060405167016345785d8a00008152f35b823461029e57602036600319011261029e5735907fffffffff00000000000000000000000000000000000000000000000000000000821680920361029e57817f80ac58cd000000000000000000000000000000000000000000000000000000006020931490811561284a575b8115612820575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483612819565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612812565b60005b8381106128875750506000910152565b8181015183820152602001612877565b906020916128b081518092818552858086019101612874565b601f01601f1916010190565b600435906001600160a01b038216820361029e57565b602435906001600160a01b038216820361029e57565b35906001600160a01b038216820361029e57565b606090600319011261029e576001600160a01b0390600435828116810361029e5791602435908116810361029e579060443590565b9181601f8401121561029e5782359167ffffffffffffffff831161029e576020808501948460051b01011161029e57565b90815180825260208080930193019160005b828110612982575050505090565b835180516001600160801b031686528083015167ffffffffffffffff168684015260409081015164ffffffffff169086015260609094019392810192600101612974565b3590811515820361029e57565b610120810190811067ffffffffffffffff8211176129f057604052565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176129f057604052565b6040810190811067ffffffffffffffff8211176129f057604052565b67ffffffffffffffff81116129f057604052565b610140810190811067ffffffffffffffff8211176129f057604052565b90601f8019910116810190811067ffffffffffffffff8211176129f057604052565b67ffffffffffffffff81116129f057601f01601f191660200190565b35906001600160801b038216820361029e57565b612aca81613842565b5060005260056020526001600160a01b036040600020541690565b6001600160801b039182169082160391908211612afe57565b634e487b7160e01b600052601160045260246000fd5b906001600160a01b038091168015612d4557600091848352602091600383526040928284862054166009825260ff6001868820015460b01c16159081612d3b575b5080612d33575b612d1c578685526003815282848620541694873315159384612c6c575b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7945087612c34575b808352600484528683206001815401905581835260038452868320816001600160a01b0319825416179055877fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88519480a4878152a183168203612c065750505050565b516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b612c5582600052600560205260406000206001600160a01b03198154169055565b878352600484528683208054600019019055612ba2565b91929380915090612cdb575b15612c865790878392612b79565b848887612ca3576024915190637e27328960e01b82526004820152fd5b90517f177e802f0000000000000000000000000000000000000000000000000000000081523360048201526024810191909152604490fd5b503386148015612d00575b80612c785750878252600583523384868420541614612c78565b5085825260068352848220338352835260ff8583205416612ce6565b602487855190630da9b01360e01b82526004820152fd5b506001612b5c565b9050151538612b55565b6024604051633250574960e11b815260006004820152fd5b359064ffffffffff8216820361029e57565b67ffffffffffffffff81116129f05760051b60200190565b929192612d9382612d6f565b604094612da36040519283612a6f565b8195848352602080930191606080960285019481861161029e57925b858410612dcf5750505050505050565b868483031261029e57825190612de482612a06565b612ded85612aad565b8252858501359067ffffffffffffffff8216820361029e57828792838b950152612e18868801612d5d565b86820152815201930192612dbf565b919082604091031261029e57604051612e3f81612a22565b6020808294612e4d816128e8565b84520135910152565b9190811015612e665760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160801b038116810361029e5790565b356001600160a01b038116810361029e5790565b35801515810361029e5790565b60405190612ebe82612a06565b60006040838281528260208201520152565b90604051612edd81612a06565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b908154612f1081612d6f565b92604093612f216040519182612a6f565b82815280946020809201926000526020600020906000935b858510612f4857505050505050565b60018481928451612f5881612a06565b64ffffffffff87546001600160801b038116835267ffffffffffffffff8160801c168584015260c01c1686820152815201930194019391612f39565b9190612fa1828285612b14565b803b612fae575b50505050565b61300a6001600160a01b03809216946040519384937f150b7a0200000000000000000000000000000000000000000000000000000000968786523360048701521660248501526044840152608060648401526084830190612897565b03906020816000938185885af1908290826130a0575b5050613057578261302f61428c565b80519190826130505760248260405190633250574960e11b82526004820152fd5b9050602001fd5b7fffffffff000000000000000000000000000000000000000000000000000000001603613088575038808080612fa8565b60249060405190633250574960e11b82526004820152fd5b909192506020813d602011613100575b816130bd60209383612a6f565b810103126130fc5751907fffffffff00000000000000000000000000000000000000000000000000000000821682036130f95750903880613020565b80fd5b5080fd5b3d91506130b0565b92919092613114613ac1565b60009381855260099260209380855260409260ff6001858a20015460a81c161561349d5784885281865260ff6001858a20015460a01c16613486576001600160a01b0391828216928315613476576001600160801b039384861691821561345f57888c5260038a5280888d20541693848314158061344f575b61342c5761319a8a6142bc565b87811685116133fb57508a8a928e928484528083528b8085209a8c848d54169c6002015460801c906131cb916142e4565b878752838652828720600201908282549160801b6fffffffffffffffffffffffffffffffff1916911617815561320090612ed0565b90808683015116918184818351169201511661321b91612ae5565b161115946001927f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d966133ce575b8782528552200154169461325e8189886146fa565b8a51908152a480331415806133c4575b61335f575b823314159081613354575b81613349575b506132b8575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce793945051908152a1565b813b15613345578351636fd110e960e01b8152600481018690523360248201526001600160a01b0390911660448201526001600160801b03909216606483015294957ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79582908183816084810103925af1613336575b85948161328a565b61333f90612a3e565b3861332e565b8780fd5b905082141538613284565b833b1515915061327e565b803b156133c0578451636fd110e960e01b8152600481018790523360248201526001600160a01b03831660448201526001600160801b0385166064820152898160848183865af16133b1575b50613273565b6133ba90612a3e565b386133ab565b8880fd5b50803b151561326e565b878252808652828220848101600160a01b60ff60a01b1982541617905560ff60f01b198154169055613249565b895163287ecaef60e21b8152600481018c90526001600160801b038a81166024830152919091166044820152606490fd5b60648a848b519163b34359d360e01b835260048301523360248301526044820152fd5b506134598a614223565b1561318d565b60248989519063d2aabcd960e01b82526004820152fd5b6004865163630d074f60e11b8152fd5b602485855190634a5541ef60e01b82526004820152fd5b60248585519062b8e7e760e51b82526004820152fd5b9291909260009381855260099060209382855260409260ff6001858a20015460a81c161561349d578785815281875260ff6001868320015460a01c1661382b576001600160a01b039081851692831561381b576001600160801b03938486169182156138045789845260038b528489852054169485831415806137f4575b6137d1576135588b838e61354483614754565b9289525260028c8820015460801c90612ae5565b87811685116137a05750908b8b928387528282528b808820998b838c54169b6002015460801c90613588916142e4565b868a52858552828a20600201908282549160801b6fffffffffffffffffffffffffffffffff191691161781556135bd90612ed0565b818086830151169381835116920151166135d691612ae5565b161115927f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d93613772575b848852825260018c88200154169461361a818c886146fa565b8b51908152a48133141580613768575b613702575b508133141590816136f7575b816136ec575b50613674575050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce793945051908152a1565b908188923b156136e8578451636fd110e960e01b8152600481018790523360248201526001600160a01b0390941660448501526001600160801b03909116606484015282908183816084810103925af16136d0575b808061328a565b6136da8691612a3e565b6136e457846136c9565b8480fd5b8280fd5b905081141538613641565b823b1515915061363b565b813b156130f9578551636fd110e960e01b8152600481018890523360248201526001600160a01b03861660448201526001600160801b0385166064820152818160848183875af1613754575b5061362f565b61376091929a50612a3e565b97388061374e565b50813b151561362a565b8488528083528c882060018101600160a01b60ff60a01b1982541617905560ff60f01b198154169055613601565b8a5163287ecaef60e21b8152600481018d90526001600160801b038a81166024830152919091166044820152606490fd5b60648b848c519163b34359d360e01b835260048301523360248301526044820152fd5b506137fe8b614223565b15613531565b60248a8a519063d2aabcd960e01b82526004820152fd5b6004875163630d074f60e11b8152fd5b602486865190634a5541ef60e01b82526004820152fd5b8060005260036020526001600160a01b0360406000205416908115613865575090565b60249060405190637e27328960e01b82526004820152fd5b64ffffffffff804216826000526009602052604060002091825482828260a01c1610156138eb5760c81c1611156138d95750600a6020526001604060002054116000146138d0576138cd906143d0565b90565b6138cd906142ff565b6001600160801b039150600201541690565b5050505050600090565b806000526009602052604060002060ff600182015460a01c1660001461391c575050600490565b805460f81c613975575460a01c64ffffffffff16421061396f5761393f8161387d565b9060005260096020526001600160801b03806002604060002001541691161060001461396a57600190565b600290565b50600090565b5050600390565b916000828152602090600382526001600160a01b036040958187842054166009855260ff6001898620015460b01c16159081613ab7575b5080613aac575b613a95579480967ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79596828552600386527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84838720541694859283613a5d575b169283613a47575b84875260038852808720846001600160a01b0319825416179055519580a4948152a1565b8387526004885280872060018154019055613a23565b613a7e86600052600560205260406000206001600160a01b03198154169055565b838852600489528488208054600019019055613a1b565b602486885190630da9b01360e01b82526004820152fd5b5081811615156139ba565b90501515386139b3565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003613af357565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b805115612e665760200190565b8051821015612e665760209160051b010190565b90613b606001600160801b0360408401511660206101008501510151906145b0565b6001600160801b0381511660e084015164ffffffffff60c08601511682156141f957815180156141cf577f0000000000000000000000000000000000000000000000000000000000000000811161419e575064ffffffffff6040613bc384613b1d565b510151168110156141475750600090819082815184905b8082106140b6575050505064ffffffffff421664ffffffffff82168110156140765750506001600160801b031680820361403f575050600754928360005260096020526040600020916001600160801b0381511660028401906fffffffffffffffffffffffffffffffff198254161790556001600160a01b036060830151166001840154750100000000000000000000000000000000000000000060808501511515918654937fffffffffffffffffff0000ff000000000000000000000000000000000000000076ff0000000000000000000000000000000000000000000060a0890151151560b01b16921617171760018601556001600160a01b0384511678ffffffffff000000000000000000000000000000000000000060c086015160a01b169060e0860151937fff000000000000000000000000000000000000000000000000000000000000007eff0000000000000000000000000000000000000000000000000000000000007dffffffffff000000000000000000000000000000000000000000000000006040613d768951996000198b0190613b2a565b51015160c81b169560f01b16911617171717845560005b818110613f6d575050600185016007556001600160a01b036020830151168015612d4557613dc3866001600160a01b039261397c565b16613f3c57613dee6001600160a01b036060840151166001600160801b038351169030903390614689565b6001600160801b0360208201511680613f0c575b507f33eb09bbf19ea3fb22c760d5164234f8bf62ca07dcf5a437ad389e96b0bd644360206001600160a01b03845116926001600160a01b038286015116946001600160a01b0360608201511696613f01613ee260808401511515928c60a086015115156001600160a01b0361010060e089015194549864ffffffffff6040519a613e8b8c612a22565b818160a01c168c5260c81c168c8b015201515116956001600160801b036040519a8b9a610140958c5233828d01528281511660408d015201511660608a0152608089015260a08801528060c0880152860190612962565b9260e08501906020908164ffffffffff91828151168552015116910152565b6101208301520390a4565b613f36906001600160a01b036060850151166001600160a01b036101008601515116903390614689565b38613e02565b60246040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152fd5b86600052600a602052604060002090613f8a8160e0870151613b2a565b518254680100000000000000008110156129f05760018101808555811015612e6657600193600052602060002001906001600160801b03815116908254917fffffff00000000000000000000000000000000000000000000000000000000007cffffffffff000000000000000000000000000000000000000000000000604077ffffffffffffffff00000000000000000000000000000000602086015160801b1694015160c01b169316171717905501613d8d565b60449250604051917fd90b7e3900000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b91935091936140da906001600160801b036140d18588613b2a565b515116906142e4565b9364ffffffffff8060406140ee8685613b2a565b5101511694168085111561410a57506001849301909291613bda565b8385606492604051927f9588ac09000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b64ffffffffff604061415884613b1d565b5101516040517ff539a17c00000000000000000000000000000000000000000000000000000000815264ffffffffff938416600482015291169091166024820152604490fd5b602490604051907f4757689b0000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f3952c64e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b60009080825260036020526001600160a01b038060408420541692833314938415614268575b5050821561425657505090565b9091506142633392612ac1565b161490565b60ff9294509060409181526006602052818120338252602052205416913880614249565b3d156142b7573d9061429d82612a91565b916142ab6040519384612a6f565b82523d6000602084013e565b606090565b6138cd906142c981614754565b90600052600960205260026040600020015460801c90612ae5565b9190916001600160801b0380809416911601918211612afe57565b64ffffffffff614334600091838352600960205280806040852054818160a01c1693849160c81c1603169181421603166147cf565b91808252600a602052604082208054156143bc5790829167ffffffffffffffff935261438e602083205482845260096020526143896001600160801b03968760026040882001541696879360801c16906148bf565b61492d565b9283136143a45750506143a090614a17565b1690565b60029350604092508152600960205220015460801c90565b602483634e487b7160e01b81526032600452fd5b64ffffffffff80421660008381526009602052604091828220908351916143f683612a52565b80549661012061447c60026001600160a01b0394858c168852602088019b8b8160a01c168d528b8160c81c168b8a015260ff8160f01c16151560608a015260f81c1515608089015260ff600196600183015490811660a08b0152818160a01c16151560c08b0152818160a81c16151560e08b015260b01c16151561010089015201612ed0565b94019384528452600a602052614493858520612f04565b91849680876144a186613b1d565b5101511692828288955b161061457a57509161452f6143899284888161453498976001600160801b039e8f6144d6898c613b2a565b5151169d8e9a67ffffffffffffffff60206144f18c84613b2a565b510151169984836145028385613b2a565b510151169650801561456e5761451e9293506000190190613b2a565b5101511680925b03169203166147cf565b6148bf565b92831361454d5750506145478391614a17565b16011690565b5160200151929392831692841683101591506145699050575090565b905090565b50505051168092614525565b8093986001600160801b0390816145918c89613b2a565b51511601169801928282808a6145a7888a613b2a565b510151166144ab565b919091604051906145c082612a22565b600091828152826020820152936001600160801b039283831691821561466a5767016345785d8a000080821161463357506145fc8591846155df565b166020870192818452111561461f5750908261461a92511690612ae5565b168252565b80634e487b7160e01b602492526001600452fd5b60449250604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b509394505050506040519061467e82612a22565b808252602082015290565b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff8411176129f0576146f892604052614a53565b565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039290921660248301526044808301939093529181526146f89161474f606483612a6f565b614a53565b80600052600960205261476d6002604060002001612ed0565b816000526009602052604060002060ff600182015460a01c166000146147a057506001600160801b039150602001511690565b5460f81c6147b257506138cd9061387d565b6138cd91506001600160801b036040818351169201511690612ae5565b600160ff1b8082149081156148b5575b5061488b57600081121561488257614808816000035b600084121561487b578360000390614aef565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311614844576000199118131561483e5790565b60000390565b60449250604051917fd49c26b300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8390614aef565b614808816147f5565b60046040517f9fe2b450000000000000000000000000000000000000000000000000000000008152fd5b90508214386147df565b806148da57506148d557670de0b6b3a764000090565b600090565b90670de0b6b3a76400008083146149275750806148ff575050670de0b6b3a764000090565b670de0b6b3a764000081146149235761491e906143896138cd93614be9565b614d2b565b5090565b91505090565b600160ff1b808214908115614a0d575b506149e35760008112156149da57614966816000035b60008412156149d35783600003906155df565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161499c576000199118131561483e5790565b60449250604051917f120b5b4300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b83906155df565b61496681614953565b60046040517fa6070c25000000000000000000000000000000000000000000000000000000008152fd5b905082143861493d565b60008112614a225790565b602490604051907f2463f3d50000000000000000000000000000000000000000000000000000000082526004820152fd5b6001600160a01b031690614a7e600080836020829551910182875af1614a7761428c565b908461568e565b908151918215159283614ac7575b505050614a965750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b8192935090602091810103126130fc5760200151908115918215036130f95750388080614a8c565b670de0b6b3a7640000916000198383099280830292838086109503948086039514614bab5782851015614b6f57908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b505080925015614bb9570490565b634e487b7160e01b600052601260045260246000fd5b8015614bb9576ec097ce7bc90715b34b9f10000000000590565b80600080831315614cfa57670de0b6b3a764000092838112614cd757506001925b808305906001600160801b03821160071b91821c9167ffffffffffffffff831160061b92831c63ffffffff811160051b90811c61ffff811160041b90811c60ff811160031b90811c91600f831160021b92831c93600197600160038711811b96871c11961717171717171781810294811d90828214614ccb57506706f05b59d3b20000905b848213614c9f5750505050500290565b808391020590671bc16d674ec80000821215614cbe575b831d90614c8f565b8091950194831d90614cb6565b93505093925050020290565b6000199392508015614bb9576ec097ce7bc90715b34b9f10000000000591614c0a565b602483604051907f059b101b0000000000000000000000000000000000000000000000000000000082526004820152fd5b6000811215614d5a5768033dd1780914b9711419811261396f57614d5190600003614d2b565b6138cd90614bcf565b680a688906bd8affffff81136155ae57670de0b6b3a764000080604092831b05907780000000000000000000000000000000000000000000000067ff000000000000008316615491575b66ff0000000000008316615389575b65ff00000000008316615289575b64ff000000008316615191575b63ff00000083166150a1575b62ff00008316614fb9575b61ff008316614ed9575b60ff8316614e02575b02911c60bf031c90565b60808316614ec7575b838316614eb5575b60208316614ea3575b60108316614e91575b60088316614e7f575b60048316614e6d575b60028316614e5b575b6001831615614df8576801000000000000000102831c614df8565b6801000000000000000102831c614e40565b6801000000000000000302831c614e37565b6801000000000000000602831c614e2e565b6801000000000000000b02831c614e25565b6801000000000000001602831c614e1c565b6801000000000000002c02831c614e13565b6801000000000000005902831c614e0b565b6180008316614fa7575b6140008316614f95575b6120008316614f83575b6110008316614f71575b6108008316614f5f575b6104008316614f4d575b6102008316614f3b575b610100831615614def57680100000000000000b102831c614def565b6801000000000000016302831c614f1f565b680100000000000002c602831c614f15565b6801000000000000058c02831c614f0b565b68010000000000000b1702831c614f01565b6801000000000000162e02831c614ef7565b68010000000000002c5d02831c614eed565b680100000000000058b902831c614ee3565b62800000831661508f575b62400000831661507d575b62200000831661506b575b621000008316615059575b620800008316615047575b620400008316615035575b620200008316615023575b62010000831615614de5576801000000000000b17202831c614de5565b680100000000000162e402831c615006565b6801000000000002c5c802831c614ffb565b68010000000000058b9102831c614ff0565b680100000000000b172102831c614fe5565b68010000000000162e4302831c614fda565b680100000000002c5c8602831c614fcf565b6801000000000058b90c02831c614fc4565b6380000000831661517f575b6340000000831661516d575b6320000000831661515b575b63100000008316615149575b63080000008316615137575b63040000008316615125575b63020000008316615113575b6301000000831615614dda5768010000000000b1721802831c614dda565b6801000000000162e43002831c6150f5565b68010000000002c5c86002831c6150e9565b680100000000058b90c002831c6150dd565b6801000000000b17217f02831c6150d1565b680100000000162e42ff02831c6150c5565b6801000000002c5c85fe02831c6150b9565b68010000000058b90bfc02831c6150ad565b6480000000008316615277575b6440000000008316615265575b6420000000008316615253575b6410000000008316615241575b640800000000831661522f575b640400000000831661521d575b640200000000831661520b575b640100000000831615614dce57680100000000b17217f802831c614dce565b68010000000162e42ff102831c6151ec565b680100000002c5c85fe302831c6151df565b6801000000058b90bfce02831c6151d2565b68010000000b17217fbb02831c6151c5565b6801000000162e42fff002831c6151b8565b68010000002c5c8601cc02831c6151ab565b680100000058b90c0b4902831c61519e565b658000000000008316615377575b654000000000008316615365575b652000000000008316615353575b651000000000008316615341575b65080000000000831661532f575b65040000000000831661531d575b65020000000000831661530b575b65010000000000831615614dc1576801000000b17218355102831c614dc1565b680100000162e430e5a202831c6152eb565b6801000002c5c863b73f02831c6152dd565b68010000058b90cf1e6e02831c6152cf565b680100000b1721bcfc9a02831c6152c1565b68010000162e43f4f83102831c6152b3565b680100002c5c89d5ec6d02831c6152a5565b6801000058b91b5bc9ae02831c615297565b6680000000000000831661547f575b6640000000000000831661546d575b6620000000000000831661545b575b66100000000000008316615449575b66080000000000008316615437575b66040000000000008316615425575b66020000000000008316615413575b6601000000000000831615614db35768010000b17255775c0402831c614db3565b6801000162e525ee054702831c6153f2565b68010002c5cc37da949202831c6153e3565b680100058ba01fb9f96d02831c6153d4565b6801000b175effdc76ba02831c6153c5565b680100162f3904051fa102831c6153b6565b6801002c605e2e8cec5002831c6153a7565b68010058c86da1c09ea202831c615398565b678000000000000000831661558f575b674000000000000000831661557d575b672000000000000000831661556b575b6710000000000000008316615559575b6708000000000000008316615547575b6704000000000000008316615535575b6702000000000000008316615523575b670100000000000000831615614da457680100b1afa5abcbed6102831c614da4565b68010163da9fb33356d802831c615501565b680102c9a3e778060ee702831c6154f1565b6801059b0d31585743ae02831c6154e1565b68010b5586cf9890f62a02831c6154d1565b6801172b83c7d517adce02831c6154c1565b6801306fe0a31b7152df02831c6154b1565b5077b504f333f9de6484800000000000000000000000000000006154a1565b602490604051907f0360d0280000000000000000000000000000000000000000000000000000000082526004820152fd5b9091906000198382098382029182808310920391808303921461567d57670de0b6b3a7640000908183101561564657947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b906156cd57508051156156a357805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580615718575b6156de575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b156156d656fea164736f6c6343000817000a"; + hex"60c034620003dc576001600160401b0390601f601f1962005a0b3881900383810183168501919086831186841017620002f557808692606094604052833981010312620003dc5782516001600160a01b038082169590929091869003620003dc5760209485810151938416809403620003dc57604001519362000081620003e1565b95601d87527f5361626c696572205632204c6f636b75702044796e616d6963204e465400000081880152620000b5620003e1565b90601182527029a0a116ab1916a627a1a5aaa816a22ca760791b81830152306080528751858111620002f5576001988954908a82811c92168015620003d1575b84831014620002d45781868493116200037b575b50839086831160011462000317576000926200030b575b5050600019600383901b1c191690891b1788555b8151948511620002f557600254938885811c95168015620002ea575b82861014620002d457848487961162000277575b50819385116001146200020d57505060009262000201575b5050600019600383901b1c191690841b176002555b60018060a01b03198481600054161760005560085416176008556040519260007fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a360a0526007556156099081620004028239608051816139a6015260a051818181610c9f0152613a670152f35b0151905038806200017c565b88959392919316600260005283600020936000905b8282106200025d575050841162000243575b505050811b0160025562000191565b015160001960f88460031b161c1916905538808062000234565b8484015186558a9790950194938401939081019062000222565b9091929394506002600052826000208580880160051c820192858910620002ca575b9188978c9297969594930160051c01915b828110620002ba57505062000164565b600081558897508b9101620002aa565b9250819262000299565b634e487b7160e01b600052602260045260246000fd5b94607f169462000150565b634e487b7160e01b600052604160045260246000fd5b01519050388062000120565b90878c94169184600052856000209260005b878282106200036457505084116200034a575b505050811b01885562000134565b015160001960f88460031b161c191690553880806200033c565b8385015186558f9790950194938401930162000329565b9091508a600052836000208680850160051c820192868610620003c7575b918d91869594930160051c01915b828110620003b757505062000109565b600081558594508d9101620003a7565b9250819262000399565b91607f1691620000f5565b600080fd5b60408051919082016001600160401b03811183821017620002f55760405256fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146126dc57508063027b6744146126b957806306fdde03146125f3578063081812fc146125d5578063095ea7b3146124d45780631400ecec1461242f5780631c1cdd4c146123c95780631e99d569146123ab57806323b872dd1461239457806331df3d481461228857806340e58ee514611f8e578063425d30dd14611f3a57806342842e0e14611f0057806342966c6814611d245780634426757014611cfd5780634857501f14611c875780634869e12d14611c4b5780634cc55e1114611b5057806354c02292146118cb5780636352211e1461189c5780636d0cee751461189c57806370a082311461182b57806375829def146117995780637cad6cd11461169e5780637de6b1db146114865780638659c27014611125578063894e9a0d14610d985780638f69b99314610d155780639067b67714610cc25780639188ec8414610c8757806395d89b4114610b77578063a22cb46514610aba578063a80fc07114610a65578063ad35efd414610a02578063b2564569146109ae578063b637b86514610951578063b88d4fde146108c8578063b8a3be6614610891578063b971302a1461083f578063bc2be1be146107ec578063c156a11d146106a8578063c87b56dd14610593578063cc364f48146104f9578063d4dbd20b146104a4578063d511609f14610455578063d975dfed14610408578063e985e9c5146103b1578063ea5ead1914610383578063eac8f5b81461032e578063f590c176146102c9578063f851a440146102a25763fdd46d601461025b57600080fd5b3461029d57606036600319011261029d57610274612809565b6044356001600160801b038116810361029d5761029b9161029361399c565b6004356133a6565b005b600080fd5b3461029d57600036600319011261029d5760206001600160a01b0360005416604051908152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c1615610317576000526009602052602060406000205460f81c6040519015158152f35b6024906040519062b8e7e760e51b82526004820152fd5b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757600052600960205260206001600160a01b0360016040600020015416604051908152f35b3461029d57604036600319011261029d5761029b6004356103a2612809565b6103ab82614197565b91612ffb565b3461029d57604036600319011261029d576103ca6127f3565b6103d2612809565b906001600160a01b03809116600052600660205260406000209116600052602052602060ff604060002054166040519015158152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757610444602091614197565b6001600160801b0360405191168152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c1615610317576000526009602052602060026040600020015460801c604051908152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757600052600960205260206001600160801b0360036040600020015416604051908152f35b3461029d57602036600319011261029d576004356000602060405161051d81612943565b828152015280600052600960205260ff60016040600020015460a81c16156103175760005260096020526040806000205464ffffffffff82519161056083612943565b818160a01c16835260c81c166020820152610591825180926020908164ffffffffff91828151168552015116910152565bf35b3461029d5760208060031936011261029d57600435906105b282613735565b5060006001600160a01b0360085416926044604051809581937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa91821561069c57600092610623575b5061061f6040519282849384528301906127ce565b0390f35b9091503d806000833e6106368183612990565b810190828183031261029d5780519067ffffffffffffffff821161029d570181601f8201121561029d57805161066b816129b2565b926106796040519485612990565b81845284828401011161029d57610695918480850191016127ab565b908261060a565b6040513d6000823e3d90fd5b3461029d57604036600319011261029d576004356106c4612809565b6106cc61399c565b81600052600960205260ff60016040600020015460a81c16156107d5578160005260036020526001600160a01b038060406000205416918233036107b65761071384614197565b6001600160801b0381166107a5575b508181161561078d578361073591613857565b908116806107555760248460405190637e27328960e01b82526004820152fd5b820361075d57005b6040516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b6024604051633250574960e11b815260006004820152fd5b6107b0908486612ffb565b84610722565b60405163216caf0d60e01b815260048101859052336024820152604490fd5b6024826040519062b8e7e760e51b82526004820152fd5b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c1615610317576000526009602052602064ffffffffff60406000205460a01c16604051908152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757600052600960205260206001600160a01b0360406000205416604051908152f35b3461029d57602036600319011261029d576004356000526009602052602060ff60016040600020015460a81c166040519015158152f35b3461029d57608036600319011261029d576108e16127f3565b6108e9612809565b6064359167ffffffffffffffff831161029d573660238401121561029d57826004013591610916836129b2565b926109246040519485612990565b808452366024828701011161029d57602081600092602461029b9801838801378501015260443591612e87565b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757600052600a60205261061f61099a6040600020612df7565b604051918291602083526020830190612899565b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c1615610317576000526009602052602060ff60016040600020015460b01c166040519015158152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757610a3c906137d0565b6040516005821015610a4f576020918152f35b634e487b7160e01b600052602160045260246000fd5b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757600052600960205260206001600160801b0360026040600020015416604051908152f35b3461029d57604036600319011261029d57610ad36127f3565b6024359081151580920361029d576001600160a01b0316908115610b4657336000526006602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b602482604051907f5b08ba180000000000000000000000000000000000000000000000000000000082526004820152fd5b3461029d57600036600319011261029d5760405160006002549060018260011c9160018416918215610c7d575b6020948585108414610c67578587948686529182600014610c47575050600114610bea575b50610bd692500383612990565b61061f6040519282849384528301906127ce565b84915060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace906000915b858310610c2f575050610bd6935082010185610bc9565b80548389018501528794508693909201918101610c18565b60ff191685820152610bd695151560051b8501019250879150610bc99050565b634e487b7160e01b600052602260045260246000fd5b92607f1692610ba4565b3461029d57600036600319011261029d5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c1615610317576000526009602052602064ffffffffff60406000205460c81c16604051908152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757610d4f906137d0565b600581101580610a4f5760028214908115610d8b575b8115610d79575b6020826040519015158152f35b9050610a4f5760046020911482610d6c565b5050600381146000610d65565b3461029d57602036600319011261029d57604051610180810181811067ffffffffffffffff8211176110eb576060916101609160405260008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e082015260006101008201526000610120820152610e1a612da4565b6101408201520152600435600052600960205260ff60016040600020015460a81c161561110d5760043560005260096020526040600020610eeb600260405192610e6384612973565b80546001600160a01b038116855264ffffffffff8160a01c16602086015264ffffffffff8160c81c16604086015260ff8160f01c161515606086015260f81c1515608085015260ff60018201546001600160a01b03811660a0870152818160a01c16151560c0870152818160a81c16151560e087015260b01c16151561010085015201612dc3565b610120820152610efc6004356137d0565b6005811015610a4f57600214611101575b610120810151906001600160a01b0360a0820151169164ffffffffff6040830151166060830151151591610100840151151560c0850151151560e086015115159060043560005260036020526001600160a01b036040600020541697600a6020526040600020956001600160a01b0389511697608064ffffffffff60208c0151169a01511515916040519a8b67ffffffffffffffff6101808281810110920111176110eb576101609c610ffe9b6101808e016040528d5260208d015260408c015260608b015260808a015260a089015260c088015260e0870152610100860152610120850152610140840152612df7565b8282015261061f604051928392602084526001600160a01b0381511660208501526001600160a01b03602082015116604085015264ffffffffff604082015116606085015264ffffffffff60608201511660808501526080810151151560a085015260a0810151151560c08501526001600160a01b0360c08201511660e085015260e081015115156101008501526101008101511515610120850152610120810151151561014085015261014081015160406001600160801b03918281511685880152826020820151166101808801520151166101a085015201516101c0808401526101e0830190612899565b634e487b7160e01b600052604160045260246000fd5b60006060820152610f0d565b602460405162b8e7e760e51b81526004356004820152fd5b3461029d5760208060031936011261029d5760043567ffffffffffffffff811161029d57611157903690600401612868565b9061116061399c565b6000915b80831061116d57005b611178838284612d49565b359261118261399c565b83600052600980865260ff90600182816040600020015460a81c161561146f57866000528188526040600020838282015460a01c166000146111d65760248860405190634a5541ef60e01b82526004820152fd5b969495965460f81c611457576112028560005260096020526001600160a01b0360406000205416331490565b156114385761121085613758565b91856000528089526112286002604060002001612dc3565b926001600160801b03948585511686831610156114205787600052828b5260406000205460f01c16156114085780858b6112686112729483895116612a06565b9601511690612a06565b86600052818a528960406000207f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa50815496600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89161783558a6113578a8716998a156113ef575b60038096019b84169b8c6fffffffffffffffffffffffffffffffff198254161790556001600160a01b03809116998a9688528160406000205416998a985260406000200154169661132d8c878a6145d5565b60405193849384916040919493606084019584526001600160801b03809216602085015216910152565b0390a47ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce789604051888152a1803b61139a575b5050505060019150019190611164565b803b1561029d5760019560006084928195604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af16113e0575b80808061138a565b6113e99061295f565b856113d8565b898601600160a01b60ff60a01b198254161790556112db565b602487604051906339c6dc7360e21b82526004820152fd5b602488604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b815260048101869052336024820152604490fd5b6024856040519063fe19f19f60e01b82526004820152fd5b6024876040519062b8e7e760e51b82526004820152fd5b3461029d5760208060031936011261029d57600435906114a461399c565b816000526009815260ff60016040600020015460a81c16156107d5576114c9826137d0565b6005811015610a4f57600481036114f25760248360405190634a5541ef60e01b82526004820152fd5b60038103611512576024836040519063fe19f19f60e01b82526004820152fd5b600214611686576115398260005260096020526001600160a01b0360406000205416331490565b1561166757816000526009815260ff60406000205460f01c161561164f578160005260098152604060002060ff60f01b19815416905560405191807f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f600080a2600382526001600160a01b036040600020541692833b6115e0575b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78383604051908152a1005b833b1561029d57600081602481837ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7987f450154640000000000000000000000000000000000000000000000000000000083528760048401525af1156115b4576116499061295f565b836115b4565b602482604051906339c6dc7360e21b82526004820152fd5b60405163216caf0d60e01b815260048101839052336024820152604490fd5b602482604051906322cad1af60e11b82526004820152fd5b3461029d57602036600319011261029d576004356001600160a01b039081811680910361029d578160005416338103611770575060085491816001600160a01b03198416176008556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a2600754600019810190811161175a5760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a1005b634e487b7160e01b600052601160045260246000fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b3461029d57602036600319011261029d576117b26127f3565b6000546001600160a01b0380821692338403611804576001600160a01b03199350169182911617600055337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf80600080a3005b6040516331b339a960e21b81526001600160a01b0385166004820152336024820152604490fd5b3461029d57602036600319011261029d576001600160a01b0361184c6127f3565b16801561186b5760005260046020526020604060002054604051908152f35b60246040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152fd5b3461029d57602036600319011261029d5760206118ba600435613735565b6001600160a01b0360405191168152f35b3461029d576020600319818136011261029d5760043567ffffffffffffffff9182821161029d576101208236039182011261029d5761190861399c565b60c4820135906022190181121561029d57810160048101359083821161029d57602401606082023603811361029d57611942913691612c7a565b9182519161194f83612c62565b9261195d6040519485612990565b808452601f1961196c82612c62565b018660005b828110611b3a5750505064ffffffffff90814216936001600160801b039687611999826139f8565b515116828a6119a7846139f8565b51015116858060406119b8866139f8565b5101511689011690604051926119cd84612927565b83528b83015260408201526119e1886139f8565b526119eb876139f8565b506001938760015b8a8c878310611ab95790838b8b611a0c81600401612d83565b92611a1960248301612d83565b92611a2660448401612d6f565b946064840135946001600160a01b039586811680910361029d57611ab198611a7198611aa698611a5860848a01612d97565b9481611a6660a48c01612d97565b976040519d8e61290a565b168c52168c8b0152166040890152606088015215156080870152151560a086015260c085015260e084015260e4369101612d1a565b610100820152613a19565b604051908152f35b889385806040611aed8b86611add8a8e9a611ad4828d613a05565b5151169a613a05565b5101511694600019890190613a05565b51015116816040611afe888c613a05565b5101511601169160405193611b1285612927565b84528301526040820152611b26828c613a05565b52611b31818b613a05565b500188906119f3565b611b42612da4565b828289010152018790611971565b3461029d57604036600319011261029d5767ffffffffffffffff60043581811161029d57611b82903690600401612868565b9160243590811161029d57611b9b903690600401612868565b9091611ba561399c565b818403611c145760005b848110611bb857005b80611c0e611bc96001938886612d49565b35611bd5838987612d49565b3560005260036020526001600160a01b0360406000205416611c00611bfb85898b612d49565b612d6f565b91611c0961399c565b6133a6565b01611baf565b60448483604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c16156103175761044460209161462f565b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c1615610317576000611cc3826137d0565b6005811015610a4f57600203611ce1575b6020906040519015158152f35b506000526009602052602060ff60406000205460f01c16611cd4565b3461029d57600036600319011261029d5760206001600160a01b0360085416604051908152f35b3461029d5760208060031936011261029d5760043590611d4261399c565b816000526009815260ff60016040600020015460a81c16156107d557816000526009815260ff60016040600020015460a01c1615611ecf57611d83826140fe565b156116675781600052600381526001600160a01b0380604060002054166009835260ff60016040600020015460b01c16159081611ec5575b5080611ebd575b611ea5577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790836000526003835260406000205416918215928315611e6a575b846000526003825260406000206001600160a01b03198154169055846000604051927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4848152a1611e5257005b60249060405190637e27328960e01b82526004820152fd5b611e8b85600052600560205260406000206001600160a01b03198154169055565b806000526004825260406000206000198154019055611e02565b60248360405190630da9b01360e01b82526004820152fd5b506000611dc2565b9050151584611dbb565b602482604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b3461029d57611f0e36612833565b60405191602083019383851067ffffffffffffffff8611176110eb5761029b9460405260008452612e87565b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c1615610317576000526009602052602060ff60016040600020015460a01c166040519015158152f35b3461029d5760208060031936011261029d5760043590611fac61399c565b8160005260099081815260ff60016040600020015460a81c16156122715782600052818152604060002060ff600182015460a01c166000146120005760248460405190634a5541ef60e01b82526004820152fd5b5460f81c612259576120288360005260096020526001600160a01b0360406000205416331490565b1561223a5761203683613758565b928060005282825261204e6002604060002001612dc3565b916001600160801b0394858451168682161015612222578260005284825260ff60406000205460f01c161561220a57816120df82888796956120d57ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce796837f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa509b5116612a06565b9701511690612a06565b9383600052868252604060002096875495600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff881617895560038a8216998a156121f0575b01998316998a6fffffffffffffffffffffffffffffffff198254161790556001600160a01b03809716978891600386528860406000205416988994875260016040600020015416946121798d85886145d5565b604080518a81526001600160801b0392831660208201529290911690820152606090a4604051838152a1813b6121ab57005b813b1561029d5760006084928195604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af16121e757005b61029b9061295f565b60018101600160a01b60ff60a01b19825416179055612126565b602483604051906339c6dc7360e21b82526004820152fd5b602483604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b815260048101849052336024820152604490fd5b6024836040519063fe19f19f60e01b82526004820152fd5b6024836040519062b8e7e760e51b82526004820152fd5b3461029d5760031960203682011261029d5760043567ffffffffffffffff9182821161029d5761014090823603011261029d576122c361399c565b604051916122d08361290a565b6122dc8260040161281f565b83526122ea6024830161281f565b60208401526122fb604483016129ce565b604084015260648201356001600160a01b038116810361029d576060840152612326608483016128fd565b608084015261233760a483016128fd565b60a084015261234860c48301612c50565b60c084015260e482013590811161029d578101913660238401121561029d57611aa6611ab1926123846020953690602460048201359101612c7a565b60e0840152610104369101612d1a565b3461029d5761029b6123a536612833565b91612a1f565b3461029d57600036600319011261029d576020600754604051908152f35b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c161561031757612403906137d0565b6005811015610a4f578060209115908115612424575b506040519015158152f35b600191501482612419565b3461029d57602036600319011261029d5760043580600052600960205260ff60016040600020015460a81c1615610317576020906000908060005260098352604060002060ff815460f01c16806124c2575b612499575b50506001600160801b0360405191168152f35b6124bb92506001600160801b0360026124b59201541691613758565b90612a06565b8280612486565b5060ff600182015460a01c1615612481565b3461029d57604036600319011261029d576124ed6127f3565b6024356124f981613735565b331515806125c2575b80612594575b6125645781906001600160a01b03809416938491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a460005260056020526040600020906001600160a01b0319825416179055600080f35b60246040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152336004820152fd5b506001600160a01b038116600052600660205260406000203360005260205260ff6040600020541615612508565b50336001600160a01b0382161415612502565b3461029d57602036600319011261029d5760206118ba6004356129e2565b3461029d57600036600319011261029d576040516000600190600154918260011c91600184169182156126af575b6020948585108414610c67578587948686529182600014610c475750506001146126525750610bd692500383612990565b84915060016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6906000915b858310612697575050610bd6935082010185610bc9565b80548389018501528794508693909201918101612680565b92607f1692612621565b3461029d57600036600319011261029d57602060405167016345785d8a00008152f35b3461029d57602036600319011261029d57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361029d57817f80ac58cd0000000000000000000000000000000000000000000000000000000060209314908115612781575b8115612757575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483612750565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612749565b60005b8381106127be5750506000910152565b81810151838201526020016127ae565b906020916127e7815180928185528580860191016127ab565b601f01601f1916010190565b600435906001600160a01b038216820361029d57565b602435906001600160a01b038216820361029d57565b35906001600160a01b038216820361029d57565b606090600319011261029d576001600160a01b0390600435828116810361029d5791602435908116810361029d579060443590565b9181601f8401121561029d5782359167ffffffffffffffff831161029d576020808501948460051b01011161029d57565b90815180825260208080930193019160005b8281106128b9575050505090565b835180516001600160801b031686528083015167ffffffffffffffff168684015260409081015164ffffffffff1690860152606090940193928101926001016128ab565b3590811515820361029d57565b610120810190811067ffffffffffffffff8211176110eb57604052565b6060810190811067ffffffffffffffff8211176110eb57604052565b6040810190811067ffffffffffffffff8211176110eb57604052565b67ffffffffffffffff81116110eb57604052565b610140810190811067ffffffffffffffff8211176110eb57604052565b90601f8019910116810190811067ffffffffffffffff8211176110eb57604052565b67ffffffffffffffff81116110eb57601f01601f191660200190565b35906001600160801b038216820361029d57565b6129eb81613735565b5060005260056020526001600160a01b036040600020541690565b6001600160801b03918216908216039190821161175a57565b906001600160a01b03809116801561078d57600091848352602091600383526040928284862054166009825260ff6001868820015460b01c16159081612c46575b5080612c3e575b612c27578685526003815282848620541694873315159384612b77575b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7945087612b3f575b808352600484528683206001815401905581835260038452868320816001600160a01b0319825416179055877fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88519480a4878152a183168203612b115750505050565b516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b612b6082600052600560205260406000206001600160a01b03198154169055565b878352600484528683208054600019019055612aad565b91929380915090612be6575b15612b915790878392612a84565b848887612bae576024915190637e27328960e01b82526004820152fd5b90517f177e802f0000000000000000000000000000000000000000000000000000000081523360048201526024810191909152604490fd5b503386148015612c0b575b80612b835750878252600583523384868420541614612b83565b5085825260068352848220338352835260ff8583205416612bf1565b602487855190630da9b01360e01b82526004820152fd5b506001612a67565b9050151538612a60565b359064ffffffffff8216820361029d57565b67ffffffffffffffff81116110eb5760051b60200190565b929192612c8682612c62565b604094612c966040519283612990565b8195848352602080930191606080960285019481861161029d57925b858410612cc25750505050505050565b868483031261029d57825190612cd782612927565b612ce0856129ce565b8252858501359067ffffffffffffffff8216820361029d57828792838b950152612d0b868801612c50565b86820152815201930192612cb2565b919082604091031261029d57604051612d3281612943565b6020808294612d408161281f565b84520135910152565b9190811015612d595760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160801b038116810361029d5790565b356001600160a01b038116810361029d5790565b35801515810361029d5790565b60405190612db182612927565b60006040838281528260208201520152565b90604051612dd081612927565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b908154612e0381612c62565b92604093612e146040519182612990565b82815280946020809201926000526020600020906000935b858510612e3b57505050505050565b60018481928451612e4b81612927565b64ffffffffff87546001600160801b038116835267ffffffffffffffff8160801c168584015260c01c1686820152815201930194019391612e2c565b9190612e94828285612a1f565b803b612ea1575b50505050565b612efd6001600160a01b03809216946040519384937f150b7a02000000000000000000000000000000000000000000000000000000009687865233600487015216602485015260448401526080606484015260848301906127ce565b03906020816000938185885af190829082612f93575b5050612f4a5782612f22614167565b8051919082612f435760248260405190633250574960e11b82526004820152fd5b9050602001fd5b7fffffffff000000000000000000000000000000000000000000000000000000001603612f7b575038808080612e9b565b60249060405190633250574960e11b82526004820152fd5b909192506020813d602011612ff3575b81612fb060209383612990565b81010312612fef5751907fffffffff0000000000000000000000000000000000000000000000000000000082168203612fec5750903880612f13565b80fd5b5080fd5b3d9150612fa3565b9291909261300761399c565b60009381855260099260209380855260409260ff6001858a20015460a81c16156133905784885281865260ff6001858a20015460a01c16613379576001600160a01b0391828216928315613369576001600160801b039384861691821561335257888c5260038a5280888d205416938483141580613342575b61331f5761308d8a614197565b87811685116132ee57508a8a928e928484528083528b8085209a8c848d54169c6002015460801c906130be916141bf565b878752838652828720600201908282549160801b6fffffffffffffffffffffffffffffffff191691161781556130f390612dc3565b90808683015116918184818351169201511661310e91612a06565b161115946001927f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d966132c1575b878252855220015416946131518189886145d5565b8a51908152a480331415806132b7575b613252575b823314159081613247575b8161323c575b506131ab575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce793945051908152a1565b813b15613238578351636fd110e960e01b8152600481018690523360248201526001600160a01b0390911660448201526001600160801b03909216606483015294957ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79582908183816084810103925af1613229575b85948161317d565b6132329061295f565b38613221565b8780fd5b905082141538613177565b833b15159150613171565b803b156132b3578451636fd110e960e01b8152600481018790523360248201526001600160a01b03831660448201526001600160801b0385166064820152898160848183865af16132a4575b50613166565b6132ad9061295f565b3861329e565b8880fd5b50803b1515613161565b878252808652828220848101600160a01b60ff60a01b1982541617905560ff60f01b19815416905561313c565b895163287ecaef60e21b8152600481018c90526001600160801b038a81166024830152919091166044820152606490fd5b60648a848b519163b34359d360e01b835260048301523360248301526044820152fd5b5061334c8a6140fe565b15613080565b60248989519063d2aabcd960e01b82526004820152fd5b6004865163630d074f60e11b8152fd5b602485855190634a5541ef60e01b82526004820152fd5b60248585519062b8e7e760e51b82526004820152fd5b9291909260009381855260099060209382855260409260ff6001858a20015460a81c1615613390578785815281875260ff6001868320015460a01c1661371e576001600160a01b039081851692831561370e576001600160801b03938486169182156136f75789845260038b528489852054169485831415806136e7575b6136c45761344b8b838e6134378361462f565b9289525260028c8820015460801c90612a06565b87811685116136935750908b8b928387528282528b808820998b838c54169b6002015460801c9061347b916141bf565b868a52858552828a20600201908282549160801b6fffffffffffffffffffffffffffffffff191691161781556134b090612dc3565b818086830151169381835116920151166134c991612a06565b161115927f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d93613665575b848852825260018c88200154169461350d818c886145d5565b8b51908152a4813314158061365b575b6135f5575b508133141590816135ea575b816135df575b50613567575050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce793945051908152a1565b908188923b156135db578451636fd110e960e01b8152600481018790523360248201526001600160a01b0390941660448501526001600160801b03909116606484015282908183816084810103925af16135c3575b808061317d565b6135cd869161295f565b6135d757846135bc565b8480fd5b8280fd5b905081141538613534565b823b1515915061352e565b813b15612fec578551636fd110e960e01b8152600481018890523360248201526001600160a01b03861660448201526001600160801b0385166064820152818160848183875af1613647575b50613522565b61365391929a5061295f565b973880613641565b50813b151561351d565b8488528083528c882060018101600160a01b60ff60a01b1982541617905560ff60f01b1981541690556134f4565b8a5163287ecaef60e21b8152600481018d90526001600160801b038a81166024830152919091166044820152606490fd5b60648b848c519163b34359d360e01b835260048301523360248301526044820152fd5b506136f18b6140fe565b15613424565b60248a8a519063d2aabcd960e01b82526004820152fd5b6004875163630d074f60e11b8152fd5b602486865190634a5541ef60e01b82526004820152fd5b8060005260036020526001600160a01b0360406000205416908115611e52575090565b64ffffffffff804216826000526009602052604060002091825482828260a01c1610156137c65760c81c1611156137b45750600a6020526001604060002054116000146137ab576137a8906142ab565b90565b6137a8906141da565b6001600160801b039150600201541690565b5050505050600090565b806000526009602052604060002060ff600182015460a01c166000146137f7575050600490565b805460f81c613850575460a01c64ffffffffff16421061384a5761381a81613758565b9060005260096020526001600160801b03806002604060002001541691161060001461384557600190565b600290565b50600090565b5050600390565b916000828152602090600382526001600160a01b036040958187842054166009855260ff6001898620015460b01c16159081613992575b5080613987575b613970579480967ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79596828552600386527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84838720541694859283613938575b169283613922575b84875260038852808720846001600160a01b0319825416179055519580a4948152a1565b83875260048852808720600181540190556138fe565b61395986600052600560205260406000206001600160a01b03198154169055565b8388526004895284882080546000190190556138f6565b602486885190630da9b01360e01b82526004820152fd5b508181161515613895565b905015153861388e565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036139ce57565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b805115612d595760200190565b8051821015612d595760209160051b010190565b90613a3b6001600160801b03604084015116602061010085015101519061448b565b6001600160801b0381511660e084015164ffffffffff60c08601511682156140d457815180156140aa577f00000000000000000000000000000000000000000000000000000000000000008111614079575064ffffffffff6040613a9e846139f8565b510151168110156140225750600090819082815184905b808210613f91575050505064ffffffffff421664ffffffffff8216811015613f515750506001600160801b0316808203613f1a575050600754928360005260096020526040600020916001600160801b0381511660028401906fffffffffffffffffffffffffffffffff198254161790556001600160a01b036060830151166001840154750100000000000000000000000000000000000000000060808501511515918654937fffffffffffffffffff0000ff000000000000000000000000000000000000000076ff0000000000000000000000000000000000000000000060a0890151151560b01b16921617171760018601556001600160a01b0384511678ffffffffff000000000000000000000000000000000000000060c086015160a01b169060e0860151937fff000000000000000000000000000000000000000000000000000000000000007eff0000000000000000000000000000000000000000000000000000000000007dffffffffff000000000000000000000000000000000000000000000000006040613c518951996000198b0190613a05565b51015160c81b169560f01b16911617171717845560005b818110613e48575050600185016007556001600160a01b03602083015116801561078d57613c9e866001600160a01b0392613857565b16613e1757613cc96001600160a01b036060840151166001600160801b038351169030903390614564565b6001600160801b0360208201511680613de7575b507f33eb09bbf19ea3fb22c760d5164234f8bf62ca07dcf5a437ad389e96b0bd644360206001600160a01b03845116926001600160a01b038286015116946001600160a01b0360608201511696613ddc613dbd60808401511515928c60a086015115156001600160a01b0361010060e089015194549864ffffffffff6040519a613d668c612943565b818160a01c168c5260c81c168c8b015201515116956001600160801b036040519a8b9a610140958c5233828d01528281511660408d015201511660608a0152608089015260a08801528060c0880152860190612899565b9260e08501906020908164ffffffffff91828151168552015116910152565b6101208301520390a4565b613e11906001600160a01b036060850151166001600160a01b036101008601515116903390614564565b38613cdd565b60246040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152fd5b86600052600a602052604060002090613e658160e0870151613a05565b518254680100000000000000008110156110eb5760018101808555811015612d5957600193600052602060002001906001600160801b03815116908254917fffffff00000000000000000000000000000000000000000000000000000000007cffffffffff000000000000000000000000000000000000000000000000604077ffffffffffffffff00000000000000000000000000000000602086015160801b1694015160c01b169316171717905501613c68565b60449250604051917fd90b7e3900000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b9193509193613fb5906001600160801b03613fac8588613a05565b515116906141bf565b9364ffffffffff806040613fc98685613a05565b51015116941680851115613fe557506001849301909291613ab5565b8385606492604051927f9588ac09000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b64ffffffffff6040614033846139f8565b5101516040517ff539a17c00000000000000000000000000000000000000000000000000000000815264ffffffffff938416600482015291169091166024820152604490fd5b602490604051907f4757689b0000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f3952c64e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b60009080825260036020526001600160a01b038060408420541692833314938415614143575b5050821561413157505090565b90915061413e33926129e2565b161490565b60ff9294509060409181526006602052818120338252602052205416913880614124565b3d15614192573d90614178826129b2565b916141866040519384612990565b82523d6000602084013e565b606090565b6137a8906141a48161462f565b90600052600960205260026040600020015460801c90612a06565b9190916001600160801b038080941691160191821161175a57565b64ffffffffff61420f600091838352600960205280806040852054818160a01c1693849160c81c1603169181421603166146aa565b91808252600a602052604082208054156142975790829167ffffffffffffffff9352614269602083205482845260096020526142646001600160801b03968760026040882001541696879360801c169061479a565b614808565b92831361427f57505061427b906148f2565b1690565b60029350604092508152600960205220015460801c90565b602483634e487b7160e01b81526032600452fd5b64ffffffffff80421660008381526009602052604091828220908351916142d183612973565b80549661012061435760026001600160a01b0394858c168852602088019b8b8160a01c168d528b8160c81c168b8a015260ff8160f01c16151560608a015260f81c1515608089015260ff600196600183015490811660a08b0152818160a01c16151560c08b0152818160a81c16151560e08b015260b01c16151561010089015201612dc3565b94019384528452600a60205261436e858520612df7565b918496808761437c866139f8565b5101511692828288955b161061445557509161440a6142649284888161440f98976001600160801b039e8f6143b1898c613a05565b5151169d8e9a67ffffffffffffffff60206143cc8c84613a05565b510151169984836143dd8385613a05565b5101511696508015614449576143f99293506000190190613a05565b5101511680925b03169203166146aa565b61479a565b92831361442857505061442283916148f2565b16011690565b5160200151929392831692841683101591506144449050575090565b905090565b50505051168092614400565b8093986001600160801b03908161446c8c89613a05565b51511601169801928282808a614482888a613a05565b51015116614386565b9190916040519061449b82612943565b600091828152826020820152936001600160801b03928383169182156145455767016345785d8a000080821161450e57506144d78591846154ba565b16602087019281845211156144fa575090826144f592511690612a06565b168252565b80634e487b7160e01b602492526001600452fd5b60449250604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b509394505050506040519061455982612943565b808252602082015290565b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff8411176110eb576145d39260405261492e565b565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039290921660248301526044808301939093529181526145d39161462a606483612990565b61492e565b8060005260096020526146486002604060002001612dc3565b816000526009602052604060002060ff600182015460a01c1660001461467b57506001600160801b039150602001511690565b5460f81c61468d57506137a890613758565b6137a891506001600160801b036040818351169201511690612a06565b600160ff1b808214908115614790575b5061476657600081121561475d576146e3816000035b60008412156147565783600003906149ca565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161471f57600019911813156147195790565b60000390565b60449250604051917fd49c26b300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b83906149ca565b6146e3816146d0565b60046040517f9fe2b450000000000000000000000000000000000000000000000000000000008152fd5b90508214386146ba565b806147b557506147b057670de0b6b3a764000090565b600090565b90670de0b6b3a76400008083146148025750806147da575050670de0b6b3a764000090565b670de0b6b3a764000081146147fe576147f9906142646137a893614ac4565b614c06565b5090565b91505090565b600160ff1b8082149081156148e8575b506148be5760008112156148b557614841816000035b60008412156148ae5783600003906154ba565b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161487757600019911813156147195790565b60449250604051917f120b5b4300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b83906154ba565b6148418161482e565b60046040517fa6070c25000000000000000000000000000000000000000000000000000000008152fd5b9050821438614818565b600081126148fd5790565b602490604051907f2463f3d50000000000000000000000000000000000000000000000000000000082526004820152fd5b6001600160a01b031690614959600080836020829551910182875af1614952614167565b9084615569565b9081519182151592836149a2575b5050506149715750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b819293509060209181010312612fef576020015190811591821503612fec5750388080614967565b670de0b6b3a7640000916000198383099280830292838086109503948086039514614a865782851015614a4a57908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b505080925015614a94570490565b634e487b7160e01b600052601260045260246000fd5b8015614a94576ec097ce7bc90715b34b9f10000000000590565b80600080831315614bd557670de0b6b3a764000092838112614bb257506001925b808305906001600160801b03821160071b91821c9167ffffffffffffffff831160061b92831c63ffffffff811160051b90811c61ffff811160041b90811c60ff811160031b90811c91600f831160021b92831c93600197600160038711811b96871c11961717171717171781810294811d90828214614ba657506706f05b59d3b20000905b848213614b7a5750505050500290565b808391020590671bc16d674ec80000821215614b99575b831d90614b6a565b8091950194831d90614b91565b93505093925050020290565b6000199392508015614a94576ec097ce7bc90715b34b9f10000000000591614ae5565b602483604051907f059b101b0000000000000000000000000000000000000000000000000000000082526004820152fd5b6000811215614c355768033dd1780914b9711419811261384a57614c2c90600003614c06565b6137a890614aaa565b680a688906bd8affffff811361548957670de0b6b3a764000080604092831b05907780000000000000000000000000000000000000000000000067ff00000000000000831661536c575b66ff0000000000008316615264575b65ff00000000008316615164575b64ff00000000831661506c575b63ff0000008316614f7c575b62ff00008316614e94575b61ff008316614db4575b60ff8316614cdd575b02911c60bf031c90565b60808316614da2575b838316614d90575b60208316614d7e575b60108316614d6c575b60088316614d5a575b60048316614d48575b60028316614d36575b6001831615614cd3576801000000000000000102831c614cd3565b6801000000000000000102831c614d1b565b6801000000000000000302831c614d12565b6801000000000000000602831c614d09565b6801000000000000000b02831c614d00565b6801000000000000001602831c614cf7565b6801000000000000002c02831c614cee565b6801000000000000005902831c614ce6565b6180008316614e82575b6140008316614e70575b6120008316614e5e575b6110008316614e4c575b6108008316614e3a575b6104008316614e28575b6102008316614e16575b610100831615614cca57680100000000000000b102831c614cca565b6801000000000000016302831c614dfa565b680100000000000002c602831c614df0565b6801000000000000058c02831c614de6565b68010000000000000b1702831c614ddc565b6801000000000000162e02831c614dd2565b68010000000000002c5d02831c614dc8565b680100000000000058b902831c614dbe565b628000008316614f6a575b624000008316614f58575b622000008316614f46575b621000008316614f34575b620800008316614f22575b620400008316614f10575b620200008316614efe575b62010000831615614cc0576801000000000000b17202831c614cc0565b680100000000000162e402831c614ee1565b6801000000000002c5c802831c614ed6565b68010000000000058b9102831c614ecb565b680100000000000b172102831c614ec0565b68010000000000162e4302831c614eb5565b680100000000002c5c8602831c614eaa565b6801000000000058b90c02831c614e9f565b6380000000831661505a575b63400000008316615048575b63200000008316615036575b63100000008316615024575b63080000008316615012575b63040000008316615000575b63020000008316614fee575b6301000000831615614cb55768010000000000b1721802831c614cb5565b6801000000000162e43002831c614fd0565b68010000000002c5c86002831c614fc4565b680100000000058b90c002831c614fb8565b6801000000000b17217f02831c614fac565b680100000000162e42ff02831c614fa0565b6801000000002c5c85fe02831c614f94565b68010000000058b90bfc02831c614f88565b6480000000008316615152575b6440000000008316615140575b642000000000831661512e575b641000000000831661511c575b640800000000831661510a575b64040000000083166150f8575b64020000000083166150e6575b640100000000831615614ca957680100000000b17217f802831c614ca9565b68010000000162e42ff102831c6150c7565b680100000002c5c85fe302831c6150ba565b6801000000058b90bfce02831c6150ad565b68010000000b17217fbb02831c6150a0565b6801000000162e42fff002831c615093565b68010000002c5c8601cc02831c615086565b680100000058b90c0b4902831c615079565b658000000000008316615252575b654000000000008316615240575b65200000000000831661522e575b65100000000000831661521c575b65080000000000831661520a575b6504000000000083166151f8575b6502000000000083166151e6575b65010000000000831615614c9c576801000000b17218355102831c614c9c565b680100000162e430e5a202831c6151c6565b6801000002c5c863b73f02831c6151b8565b68010000058b90cf1e6e02831c6151aa565b680100000b1721bcfc9a02831c61519c565b68010000162e43f4f83102831c61518e565b680100002c5c89d5ec6d02831c615180565b6801000058b91b5bc9ae02831c615172565b6680000000000000831661535a575b66400000000000008316615348575b66200000000000008316615336575b66100000000000008316615324575b66080000000000008316615312575b66040000000000008316615300575b660200000000000083166152ee575b6601000000000000831615614c8e5768010000b17255775c0402831c614c8e565b6801000162e525ee054702831c6152cd565b68010002c5cc37da949202831c6152be565b680100058ba01fb9f96d02831c6152af565b6801000b175effdc76ba02831c6152a0565b680100162f3904051fa102831c615291565b6801002c605e2e8cec5002831c615282565b68010058c86da1c09ea202831c615273565b678000000000000000831661546a575b6740000000000000008316615458575b6720000000000000008316615446575b6710000000000000008316615434575b6708000000000000008316615422575b6704000000000000008316615410575b67020000000000000083166153fe575b670100000000000000831615614c7f57680100b1afa5abcbed6102831c614c7f565b68010163da9fb33356d802831c6153dc565b680102c9a3e778060ee702831c6153cc565b6801059b0d31585743ae02831c6153bc565b68010b5586cf9890f62a02831c6153ac565b6801172b83c7d517adce02831c61539c565b6801306fe0a31b7152df02831c61538c565b5077b504f333f9de64848000000000000000000000000000000061537c565b602490604051907f0360d0280000000000000000000000000000000000000000000000000000000082526004820152fd5b9091906000198382098382029182808310920391808303921461555857670de0b6b3a7640000908183101561552157947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b906155a8575080511561557e57805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b815115806155f3575b6155b9575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b156155b156fea164736f6c6343000817000a"; bytes public constant BYTECODE_LOCKUP_LINEAR = - hex"60a034620003b757601f19906001600160401b0390601f6200496b3881900382810186168401919085831185841017620002d0578085926040948552833981010312620003b75781516001600160a01b038082169490929091859003620003b757602080940151928316809303620003b7576200007b620003bc565b93601c85527f5361626c696572205632204c6f636b7570204c696e656172204e46540000000081860152620000af620003bc565b96601188527029a0a116ab1916a627a1a5aaa816a624a760791b82890152306080528551848111620002d0576001968754908882811c92168015620003ac575b85831014620002af57818684931162000356575b508490868311600114620002f257600092620002e6575b5050600019600383901b1c191690871b1786555b8751938411620002d0576002548681811c91168015620002c5575b83821014620002af5783811162000263575b5081928411600114620001f65750508192939495600092620001ea575b5050600019600383901b1c191690831b176002555b60018060a01b03198381600054161760005560085416176008556040519160007fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a360075561458e9081620003dd8239608051816139100152f35b01519050388062000178565b839291921696600260005282600020926000905b8982106200024b575050838697989695961062000231575b505050811b016002556200018d565b015160001960f88460031b161c1916905538808062000222565b8088859682949686015181550195019301906200020a565b6002600052826000208480870160051c820192858810620002a5575b0160051c019087905b828110620002985750506200015b565b6000815501879062000288565b925081926200027f565b634e487b7160e01b600052602260045260246000fd5b90607f169062000149565b634e487b7160e01b600052604160045260246000fd5b0151905038806200011a565b90848a94169184600052866000209260005b888282106200033f575050841162000325575b505050811b0186556200012e565b015160001960f88460031b161c1916905538808062000317565b8385015186558d9790950194938401930162000304565b90915088600052846000208680850160051c820192878610620003a2575b918b91869594930160051c01915b8281106200039257505062000103565b600081558594508b910162000382565b9250819262000374565b91607f1691620000ef565b600080fd5b60408051919082016001600160401b03811183821017620002d05760405256fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a714612f2757508063027b674414612f0457806306fdde0314612e3f578063081812fc14612e20578063095ea7b314612d275780631400ecec14612c875780631c1cdd4c14612c225780631e99d56914612c0457806323b872dd14612bec57806340e58ee51461296e578063425d30dd1461291d57806342842e0e146128cd57806342966c68146126f257806344267570146126cb5780634857501f146126555780634869e12d1461261a5780634cc55e111461218a57806353b157271461206b5780636352211e1461203b5780636d0cee751461203b57806370a0823114611fcb57806375829def14611f38578063780a82c814611eeb5780637cad6cd114611df15780637de6b1db14611bca5780638659c27014611879578063894e9a0d146115915780638f69b993146114f55780639067b677146114a557806395d89b4114611396578063a22cb465146112d9578063a80fc07114611287578063ab167ccc14611138578063ad35efd4146110d6578063b256456914611085578063b88d4fde14610ff8578063b8a3be6614610fc3578063b971302a14610f74578063bc2be1be14610f24578063c156a11d14610a77578063c87b56dd1461095b578063cc364f4814610890578063d4dbd20b1461083e578063d511609f146107f2578063d975dfed146107a6578063e985e9c514610751578063ea5ead1914610729578063eac8f5b8146106d7578063f590c17614610675578063f851a4401461064f5763fdd46d601461025257600080fd5b3461064c57606036600319011261064c576004359061026f613056565b916102786131b3565b92610281613906565b818352600960209181835260ff600160408720015460a81c16156106355783855281835260ff600160408720015460a01c1661061d576001600160a01b03958682169283156105f3576001600160801b03938483169081156105db57878952600387528960408a2054169283821415806105cb575b6105a75761030389614079565b87811684116105755750888a5280885260408a20968360028d8a541699015460801c0181811161056157988b9c8b9c9a937f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d936103958e96859f8f6040816103909360029352878a5220019182906001600160801b036001600160801b031983549260801b169116179055565b6134aa565b906103b1818684015116928260408183511692015116906131ed565b161115610532575b848c528252600160408c20015416946103d3818a886140a4565b604051908152a48033141580610528575b6104ba575b8333141590816104af575b816104a4575b5061042e575b837ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78688604051908152a180f35b823b156104a057604051636fd110e960e01b8152600481018790523360248201526001600160a01b039290921660448301526001600160801b031660648201529082908290608490829084905af1610488575b8080610400565b610491906130d2565b61049c578238610481565b8280fd5b8380fd5b9050831415386103fa565b843b151591506103f4565b803b1561052457604051636fd110e960e01b8152600481018890523360248201526001600160a01b03841660448201526001600160801b03831660648201528590818160848183875af1610510575b50506103e9565b610519906130d2565b610524578438610509565b8480fd5b50803b15156103e4565b848c5280835260408c2060018101600160a01b60ff60a01b1982541617905560ff60f01b1981541690556103b9565b60248c634e487b7160e01b81526011600452fd5b60405163287ecaef60e21b8152600481018b90526001600160801b038781166024830152919091166044820152606490fd5b606489836040519163b34359d360e01b835260048301523360248301526044820152fd5b506105d589613962565b156102f6565b6024886040519063d2aabcd960e01b82526004820152fd5b60046040517fc61a0e9e000000000000000000000000000000000000000000000000000000008152fd5b60248460405190634a5541ef60e01b82526004820152fd5b6024846040519062b8e7e760e51b82526004820152fd5b80fd5b503461064c578060031936011261064c576001600160a01b036020915416604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057816040916020935260098352205460f81c6040519015158152f35b6024906040519062b8e7e760e51b82526004820152fd5b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760016040836001600160a01b0393602095526009855220015416604051908152f35b503461064c57604036600319011261064c5760043590610747613056565b9161027881614079565b503461064c57604036600319011261064c5761076b613040565b6040610775613056565b926001600160a01b0380931681526006602052209116600052602052602060ff604060002054166040519015158152f35b503461064c57602036600319011261064c5760ff6001604060043593848152600960205220015460a81c16156106c0576107e1602091614079565b6001600160801b0360405191168152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057604082600292602094526009845220015460801c604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760036040836001600160801b0393602095526009855220015416604051908152f35b503461064c576020908160031936011261064c57600435916108b061348b565b508282526009815260ff600160408420015460a81c16156109445760609282526009815264ffffffffff9182604082205460a01c1692600a835260408181842054169260098552205460c81c16916040519361090b85613103565b8452830152604082015261094260405180926040908164ffffffffff91828151168552826020820151166020860152015116910152565bf35b6024836040519062b8e7e760e51b82526004820152fd5b503461064c57602080600319360112610a675760043561097a8161365f565b50826001600160a01b0360085416916044604051809481937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa928315610a6b5780936109ea575b50506109e660405192828493845283019061301b565b0390f35b909192503d8082843e6109fd8184613175565b8201918381840312610a675780519067ffffffffffffffff821161049c570182601f82011215610a6757805191610a3383613197565b93610a416040519586613175565b83855285848401011161064c575090610a5f91848085019101612ff8565b9038806109d0565b5080fd5b604051903d90823e3d90fd5b503461064c57604036600319011261064c57600435610a94613056565b610a9c613906565b81835260099060209082825260ff600160408720015460a81c161561063557838552600382526001600160a01b03918260408720541693843303610f0557610ae386614079565b906001600160801b039081831680158015610b83575b50505050505081811615610b6b5783610b11916137c1565b90811680610b315760248460405190637e27328960e01b82526004820152fd5b8203610b3b578380f35b6040516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b60248560405190633250574960e11b82526004820152fd5b610b8b613906565b898b5282865260ff600160408d20015460a81c1615610eee57898b5282865260ff600160408d20015460a01c16610ed65788156105f357610ebe57888a52600385528660408b205416918289141580610eae575b610e8a57610bec8a614079565b8481168311610e585750898b5280865260408b20938260028a87541696015460801c01818111610e445790610c538d9796959493928d8952838a52610390600260408b20019182906001600160801b036001600160801b031983549260801b169116179055565b90610c6f818a84015116928260408183511692015116906131ed565b161115610e15575b8a86528652888a7f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d888b600160408b2001541694610cb68186886140a4565b604051908152a48033141580610e0b575b610da1575b813314159081610d96575b81610d8b575b50610d1a575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790604051868152a1388080808080610af9565b803b1561049c57604051636fd110e960e01b8152600481018990523360248201526001600160a01b03881660448201526001600160801b0392909216606483015282908290608490829084905af1610d73575b80610ce3565b610d7c906130d2565b610d87578538610d6d565b8580fd5b905081141538610cdd565b823b15159150610cd7565b803b156104a057604051636fd110e960e01b8152600481018a90523360248201526001600160a01b03891660448201526001600160801b03841660648201528490818160848183875af1610df7575b5050610ccc565b610e00906130d2565b6104a0578338610df0565b50803b1515610cc7565b8a86528087526040862060018101600160a01b60ff60a01b1982541617905560ff60f01b198154169055610c77565b60248d634e487b7160e01b81526011600452fd5b60405163287ecaef60e21b8152600481018c90526001600160801b038781166024830152919091166044820152606490fd5b60648a8a6040519163b34359d360e01b835260048301523360248301526044820152fd5b50610eb88a613962565b15610bdf565b6024896040519063d2aabcd960e01b82526004820152fd5b60248a60405190634a5541ef60e01b82526004820152fd5b60248a6040519062b8e7e760e51b82526004820152fd5b60405163216caf0d60e01b815260048101879052336024820152604490fd5b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760408264ffffffffff926020945260098452205460a01c16604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c0576040826001600160a01b03926020945260098452205416604051908152f35b503461064c57602036600319011261064c5760ff6001604060209360043581526009855220015460a81c166040519015158152f35b503461064c57608036600319011261064c57611012613040565b61101a613056565b906064359067ffffffffffffffff82116104a057366023830112156104a0578160040135928461104985613197565b936110576040519586613175565b8585523660248783010111610a675785611082966024602093018388013785010152604435916134f2565b80f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057600160408360ff93602095526009855220015460b01c166040519015158152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05761110f9061373a565b60405190600581101561112457602092508152f35b602483634e487b7160e01b81526021600452fd5b503461064c5761014036600319011261064c57611153613906565b61115b61348b565b9064ffffffffff804216808452816111716134de565b16156112805781806111816134de565b8301165b16602085015260e43590828216820361127b5701166040830152600435916001600160a01b039182841680940361127b576024359083821680920361127b57604435906001600160801b03821680920361127b576064359085821680920361064c57506084359182151580930361127b5760a4359384151580950361127b5760405197611211896130e6565b8852602088015260408701526060860152608085015260a084015260c083015260406101031936011261127b576040519161124b83613159565b61010435918216820361127b57826112739260209452610124358482015260e08201526139cb565b604051908152f35b600080fd5b8183611185565b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760026040836001600160801b0393602095526009855220015416604051908152f35b503461064c57604036600319011261064c576112f3613040565b6024359081151580920361127b576001600160a01b03169081156113655733835260066020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b602482604051907f5b08ba180000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064c578060031936011261064c5760405190806002549160018360011c926001851694851561149b575b60209586861081146114875785885287949392918790821561146557505060011461140b575b50506113f792500383613175565b6109e660405192828493845283019061301b565b90859250600282527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b85831061144d5750506113f7935082010138806113e9565b80548389018501528794508693909201918101611435565b92509350506113f794915060ff191682840152151560051b82010138806113e9565b602483634e487b7160e01b81526022600452fd5b93607f16936113c3565b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760408264ffffffffff926020945260098452205460c81c16604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05761152e9061373a565b906005821015908161156f5760028314918215611583575b821561155a575b6020836040519015158152f35b90915061156f5750600460209114388061154d565b80634e487b7160e01b602492526021600452fd5b506003831491506000611546565b503461064c57602036600319011261064c57806101406040516115b38161311f565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201526115ef61348b565b61012082015201526004358152600960205260ff600160408320015460a81c1615611861576004358152600960205260408120906116bd6002604051936116358561313c565b80546001600160a01b038116865264ffffffffff8160a01c16602087015264ffffffffff8160c81c16604087015260ff8160f01c161515606087015260f81c1515608086015260ff60018201546001600160a01b03811660a0880152818160a01c16151560c0880152818160a81c16151560e088015260b01c161515610100860152016134aa565b6101208301526116ce60043561373a565b600581101561184d576101406101a093600264ffffffffff9314611842575b6101208101518360406001600160a01b0360a085015116966004358152600a6020522054169084604084015116606084015115159661010085015115159160c086015115159060e08701511515926001600160a01b038851169a60808b60208b015116990151151590604051996117638b61311f565b8d8b5260208b015260408a01526060890152608088015260a087015260c086015260e0850152610100840152610120830152828201526040519384528260208201511660208501526040810151151560408501526060810151151560608501526001600160a01b0360808201511660808501528260a08201511660a085015260c0810151151560c085015260e0810151151560e0850152610100810151151561010085015261012081015160406001600160801b0391828151166101208801528260208201511685880152015116610160850152015116610180820152f35b8360608201526116ed565b602482634e487b7160e01b81526021600452fd5b602460405162b8e7e760e51b81526004356004820152fd5b503461064c57602080600319360112610a675760043567ffffffffffffffff811161049c576118ac9036906004016130a1565b91906118b6613906565b83925b8084106118c4578480f35b6118cf848284613465565b35936118d9613906565b848652600980855260ff90600190828260408b20015460a81c1615611bb357878952808752604089208281015460a01c8416156119285760248960405190634a5541ef60e01b82526004820152fd5b9790919293949596975460f81c611b9b576119598160005260096020526001600160a01b0360406000205416331490565b15611b7b5761196781613682565b818a5282895261197c600260408c20016134aa565b906001600160801b0395868351168783161015611b6357838c52848b5260408c205460f01c1615611b4b5791818a6119cd85898f9a9998966119c38c9983879351166131ed565b95015116906131ed565b8386528482527f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa5060408720916040835499600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c161785558b83169a8b15611b32575b60038096019c88169c8d6001600160801b03198254161790556001600160a01b0392838092169b8c9789522054169889965260408d2001541694611a778b85886140a4565b604080518881526001600160801b0392831660208201529290911690820152606090a47ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78a604051838152a1813b611adb575b5050505050506001019291906118b9565b813b15610d8757856084928195604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af1611b1e575b80808080611aca565b611b27906130d2565b610524578438611b15565b818601600160a01b60ff60a01b19825416179055611a32565b602483604051906339c6dc7360e21b82526004820152fd5b602484604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b81526004810191909152336024820152604490fd5b6024906040519063fe19f19f60e01b82526004820152fd5b6024886040519062b8e7e760e51b82526004820152fd5b503461064c57602080600319360112610a675760043590611be9613906565b8183526009815260ff600160408520015460a81c1615611dda57611c0c8261373a565b6005811015611dc65760048103611c355760248360405190634a5541ef60e01b82526004820152fd5b60038103611c55576024836040519063fe19f19f60e01b82526004820152fd5b600214611dae57611c7c8260005260096020526001600160a01b0360406000205416331490565b15611d8f578183526009815260ff604084205460f01c1615611d7757818352600981526040832060ff60f01b19815416905582604051837f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f8380a2600383526001600160a01b03604083205416803b611d1f575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce791604051908152a180f35b803b1561049c57816024818580947f450154640000000000000000000000000000000000000000000000000000000083528960048401525af1611d63575b80611cf0565b611d6c906130d2565b61049c578238611d5d565b602482604051906339c6dc7360e21b82526004820152fd5b60405163216caf0d60e01b815260048101839052336024820152604490fd5b602482604051906322cad1af60e11b82526004820152fd5b602484634e487b7160e01b81526021600452fd5b6024826040519062b8e7e760e51b82526004820152fd5b503461064c57602036600319011261064c576004356001600160a01b039081811680910361049c5781835416338103611ec2575060085491816001600160a01b03198416176008556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a26007546000198101908111611eae5760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a180f35b602482634e487b7160e01b81526011600452fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760408264ffffffffff9260209452600a8452205416604051908152f35b503461064c57602036600319011261064c57611f52613040565b9080546001600160a01b0380821693338503611fa4576001600160a01b03199394501691829116178255337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808380a380f35b6040516331b339a960e21b81526001600160a01b0386166004820152336024820152604490fd5b503461064c57602036600319011261064c576001600160a01b03611fed613040565b16801561200a578160409160209352600483522054604051908152f35b602482604051907f89c62b640000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064c57602036600319011261064c57602061205a60043561365f565b6001600160a01b0360405191168152f35b503461064c5761016036600319011261064c57612086613906565b60405190612093826130e6565b61209b613040565b82526120a5613056565b60208301526120b26131b3565b60408301526001600160a01b03906064358281168103610a67576060840152608435801515810361127b57608084015260a435801515810361127b5760a084015260603660c319011261064c575060405161210c81613103565b64ffffffffff60c435818116810361127b57825260e435818116810361127b57602083015261010435908116810361127b57604082015260c083015260406101231936011261127b576040519161216283613159565b61012435918216820361127b57826112739260209452610144358482015260e08201526139cb565b503461064c57604036600319011261064c5767ffffffffffffffff60043581811161049c576121bd9036906004016130a1565b90916024359081116104a0576121d79036906004016130a1565b6121df613906565b8083036125e357845b8381106121f3578580f35b6121fe818587613465565b359061220b818688613465565b35875260036020526001600160a01b0360408820541661222c828587613465565b35906001600160801b038216820361127b57612246613906565b838952600960205260ff600160408b20015460a81c161561063557838952600960205260ff600160408b20015460a01c1661061d5780156105f3576001600160801b038216156125cb5783895260036020526001600160a01b0360408a2054169182821415806125bb575b612597576122be85614079565b6001600160801b0381166001600160801b038316116125675750848a52600960205260408a20926001600160a01b038454169360026001600160801b03841691015460801c016001600160801b038111610561579061234f8c959493928887526009602052610390600260408920019182906001600160801b036001600160801b031983549260801b169116179055565b6001600160801b0361237381602084015116928260408183511692015116906131ed565b161115612536575b86855260096020526001600160a01b036001604087200154166123a86001600160801b03841685836140a4565b83887f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d60206040516001600160801b0388168152a4803314158061252c575b6124c2575b8333141590816124b7575b816124ac575b5061243a575b505050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce76020600193604051908152a1016121e8565b823b156104a057604051636fd110e960e01b8152600481018790523360248201526001600160a01b039290921660448301526001600160801b031660648201529082908290608490829084905af1612494575b8080612403565b61249d906130d2565b6124a857863861248d565b8680fd5b9050831415386123fd565b843b151591506123f7565b803b1561052457604051636fd110e960e01b8152600481018890523360248201526001600160a01b03841660448201526001600160801b03831660648201528590818160848183875af1612518575b50506123ec565b612521906130d2565b610524578438612511565b50803b15156123e7565b86855260096020526040852060018101600160a01b60ff60a01b1982541617905560ff60f01b19815416905561237b565b60405163287ecaef60e21b8152600481018790526001600160801b03928316602482015291166044820152606490fd5b606485836040519163b34359d360e01b835260048301523360248301526044820152fd5b506125c585613962565b156122b1565b6024846040519063d2aabcd960e01b82526004820152fd5b82604491604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b503461064c57602036600319011261064c5760ff6001604060043593848152600960205220015460a81c16156106c0576107e1602091614100565b503461064c57602036600319011261064c5760043590818152600960205260ff600160408320015460a81c1615611dda57806126908361373a565b92600584101561184d576002602094036126b1575b50506040519015158152f35b815260098352604090205460f01c60ff16905038806126a5565b503461064c578060031936011261064c5760206001600160a01b0360085416604051908152f35b503461064c57602080600319360112610a675760043590612711613906565b8183526009815260ff600160408520015460a81c1615611dda578183526009815260ff600160408520015460a01c161561289c5761274e82613962565b15611d8f5781600052600381526001600160a01b0380604060002054166009835260ff60016040600020015460b01c16159081612892575b508061288a575b612872577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790836000526003835260406000205416918215928315612837575b846000526003825260406000206001600160a01b03198154169055846000604051927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4848152a161281f575080f35b60249060405190637e27328960e01b82526004820152fd5b61285885600052600560205260406000206001600160a01b03198154169055565b8060005260048252604060002060001981540190556127cd565b60248360405190630da9b01360e01b82526004820152fd5b50600061278d565b9050151538612786565b602482604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064c576128dc3661306c565b60405191602083019383851067ffffffffffffffff86111761290757611082946040528584526134f2565b634e487b7160e01b600052604160045260246000fd5b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057600160408360ff93602095526009855220015460a01c166040519015158152f35b503461064c576020908160031936011261064c576004359061298e613906565b81815260099283815260ff600160408420015460a81c16156109445782825283815260408220600181015460a01c60ff16156129dc5760248460405190634a5541ef60e01b82526004820152fd5b9284935460f81c611b9b57612a078160005260096020526001600160a01b0360406000205416331490565b15611b7b57612a1581613682565b93818452808352612a2b600260408620016134aa565b916001600160801b0393848451168588161015611dae5781865282815260ff604087205460f01c1615611d7757612a79878683612a6f8a9b838a9c9b9c51166131ed565b97015116906131ed565b908286528381526040862091825494600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87161784556003898316948515612bd2575b01988716988981546001600160801b0319161790556001600160a01b038096168097600385528760408b205416978893865260408b20600101541693612b058c84876140a4565b604080518981526001600160801b03938416602082015292909116908201528060608101037f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa5091a4604051908382527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce791a1823b612b81578480f35b823b15610524576084928591604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af1612bc3575b81818080808480f35b612bcc906130d2565b81612bba565b60018101600160a01b60ff60a01b19825416179055612abe565b503461064c57611082612bfe3661306c565b9161321c565b503461064c578060031936011261064c576020600754604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057612c5b9061373a565b90600582101561156f5760208215838115612c7c575b506040519015158152f35b600191501482612c71565b503461064c57602036600319011261064c5760043590818152600960205260ff600160408320015460a81c1615611dda57602091604082828152600985522060ff815460f01c1680612d15575b612cec575b50506001600160801b0360405191168152f35b612d0e92506001600160801b036002612d089201541691613682565b906131ed565b3880612cd9565b5060ff600182015460a01c1615612cd4565b503461064c57604036600319011261064c57612d41613040565b602435612d4d8161365f565b33151580612e0d575b80612de3575b612db35781906001600160a01b03809416938491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258680a48252600560205260408220906001600160a01b031982541617905580f35b60246040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152336004820152fd5b506001600160a01b038116845260066020526040842033855260205260ff60408520541615612d5c565b50336001600160a01b0382161415612d56565b503461064c57602036600319011261064c57602061205a6004356131c9565b503461064c578060031936011261064c576040519080600191600154928360011c9260018516948515612efa575b602095868610811461148757858852879493929187908215611465575050600114612ea05750506113f792500383613175565b90859250600182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b858310612ee25750506113f7935082010138806113e9565b80548389018501528794508693909201918101612eca565b93607f1693612e6d565b503461064c578060031936011261064c57602060405167016345785d8a00008152f35b905034610a67576020366003190112610a67576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361049c57602092507f80ac58cd000000000000000000000000000000000000000000000000000000008114908115612fce575b8115612fa4575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438612f9d565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612f96565b60005b83811061300b5750506000910152565b8181015183820152602001612ffb565b9060209161303481518092818552858086019101612ff8565b601f01601f1916010190565b600435906001600160a01b038216820361127b57565b602435906001600160a01b038216820361127b57565b606090600319011261127b576001600160a01b0390600435828116810361127b5791602435908116810361127b579060443590565b9181601f8401121561127b5782359167ffffffffffffffff831161127b576020808501948460051b01011161127b57565b67ffffffffffffffff811161290757604052565b610100810190811067ffffffffffffffff82111761290757604052565b6060810190811067ffffffffffffffff82111761290757604052565b610160810190811067ffffffffffffffff82111761290757604052565b610140810190811067ffffffffffffffff82111761290757604052565b6040810190811067ffffffffffffffff82111761290757604052565b90601f8019910116810190811067ffffffffffffffff82111761290757604052565b67ffffffffffffffff811161290757601f01601f191660200190565b604435906001600160801b038216820361127b57565b6131d28161365f565b5060005260056020526001600160a01b036040600020541690565b6001600160801b03918216908216039190821161320657565b634e487b7160e01b600052601160045260246000fd5b906001600160a01b03809116801561344d57600091848352602091600383526040928284862054166009825260ff6001868820015460b01c16159081613443575b508061343b575b613424578685526003815282848620541694873315159384613374575b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce794508761333c575b808352600484528683206001815401905581835260038452868320816001600160a01b0319825416179055877fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88519480a4878152a18316820361330e5750505050565b516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b61335d82600052600560205260406000206001600160a01b03198154169055565b8783526004845286832080546000190190556132aa565b919293809150906133e3575b1561338e5790878392613281565b8488876133ab576024915190637e27328960e01b82526004820152fd5b90517f177e802f0000000000000000000000000000000000000000000000000000000081523360048201526024810191909152604490fd5b503386148015613408575b806133805750878252600583523384868420541614613380565b5085825260068352848220338352835260ff85832054166133ee565b602487855190630da9b01360e01b82526004820152fd5b506001613264565b905015153861325d565b6024604051633250574960e11b815260006004820152fd5b91908110156134755760051b0190565b634e487b7160e01b600052603260045260246000fd5b6040519061349882613103565b60006040838281528260208201520152565b906040516134b781613103565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b60c43564ffffffffff8116810361127b5790565b91906134ff82828561321c565b803b61350c575b50505050565b6135686001600160a01b03809216946040519384937f150b7a020000000000000000000000000000000000000000000000000000000096878652336004870152166024850152604484015260806064840152608483019061301b565b03906020816000938185885af1908290826135fe575b50506135b5578261358d614049565b80519190826135ae5760248260405190633250574960e11b82526004820152fd5b9050602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016036135e6575038808080613506565b60249060405190633250574960e11b82526004820152fd5b909192506020813d602011613657575b8161361b60209383613175565b81010312610a675751907fffffffff000000000000000000000000000000000000000000000000000000008216820361064c575090388061357e565b3d915061360e565b8060005260036020526001600160a01b036040600020541690811561281f575090565b600090808252600a60205264ffffffffff918260408220541642106137345760096020526040812092835490808260c81c16918242101561371e576136d39394955060a01c168091039042036142c3565b9082815260096020526001600160801b03926136f98460026040852001541680946143a3565b9283116137065750501690565b60029350604092508152600960205220015460801c90565b505050505060026001600160801b039101541690565b91505090565b806000526009602052604060002060ff600182015460a01c16600014613761575050600490565b805460f81c6137ba575460a01c64ffffffffff1642106137b45761378481613682565b9060005260096020526001600160801b0380600260406000200154169116106000146137af57600190565b600290565b50600090565b5050600390565b916000828152602090600382526001600160a01b036040958187842054166009855260ff6001898620015460b01c161590816138fc575b50806138f1575b6138da579480967ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79596828552600386527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef848387205416948592836138a2575b16928361388c575b84875260038852808720846001600160a01b0319825416179055519580a4948152a1565b8387526004885280872060018154019055613868565b6138c386600052600560205260406000206001600160a01b03198154169055565b838852600489528488208054600019019055613860565b602486885190630da9b01360e01b82526004820152fd5b5081811615156137ff565b90501515386137f8565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361393857565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b60009080825260036020526001600160a01b0380604084205416928333149384156139a7575b5050821561399557505090565b9091506139a233926131c9565b161490565b60ff9294509060409181526006602052818120338252602052205416913880613988565b906139ec6001600160801b03604084015116602060e085015101519061417b565b916001600160801b0383511660c0820151901561401f5764ffffffffff81511615613ff55764ffffffffff81511690604081019164ffffffffff8351169081811015613fb5575050602081019064ffffffffff8251169081151580613fa3575b613f6257505064ffffffffff90511664ffffffffff8251169081811015613f2257505064ffffffffff8042169151169081811015613ee2575050600754926001600160801b0381511660405190613aa282613103565b815260006020820152600060408201526001600160a01b036060840151169060c08401519164ffffffffff604084015116906080860151151560a087015115159264ffffffffff6001600160a01b0389511696511660405196613b048861313c565b87526020870152604086015260608501526000608085015260a0840152600060c0840152600160e08401526101008301526101208201528460005260096020526040600020906001600160a01b0381511678ffffffffff0000000000000000000000000000000000000000602083015160a01b16907dffffffffff00000000000000000000000000000000000000000000000000604084015160c81b167eff0000000000000000000000000000000000000000000000000000000000006060850151151560f01b16917fff000000000000000000000000000000000000000000000000000000000000006080860151151560f81b1693171717178255600182016001600160a01b0360a08301511681549074ff000000000000000000000000000000000000000060c0850151151560a01b1675ff00000000000000000000000000000000000000000060e0860151151560a81b16917fffffffffffffffffff000000000000000000000000000000000000000000000076ff00000000000000000000000000000000000000000000610100880151151560b01b1694161717171790556001600160801b03604060036101206002860194015194613cfc84875116956001600160801b03199687825416178155856020890151166001600160801b036001600160801b031983549260801b169116179055565b01930151169082541617905564ffffffffff602060c084015101511680613ec4575b50600184016007556001600160a01b03602083015116801561344d57613d4c856001600160a01b03926137c1565b16613e9357613d776001600160a01b036060840151166001600160801b038351169030903390614254565b6001600160801b0360208201511680613e64575b506001600160a01b038251167f44cb432df42caa86b7ec73644ab8aec922bc44c71c98fc330addc75b88adbc7c610140866001600160a01b0360208701511694613e5b6001600160a01b03606089015116976080810151151560a08201511515906001600160801b0360206001600160a01b0360e060c087015196015151169660405198895233828a01528281511660408a01520151166060870152608086015260a085015260c08401906040908164ffffffffff91828151168552826020820151166020860152015116910152565b610120820152a4565b613e8d906001600160a01b036060850151166001600160a01b0360e08601515116903390614254565b38613d8b565b60246040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152fd5b600a60205260406000209064ffffffffff1982541617905538613d1e565b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b6040517f9fee269100000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b516040517fb39831ea00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b508164ffffffffff8251161015613a4c565b6040517f5057f08400000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b60046040517f62201b50000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b3d15614074573d9061405a82613197565b916140686040519384613175565b82523d6000602084013e565b606090565b6140a19061408681614100565b90600052600960205260026040600020015460801c906131ed565b90565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039290921660248301526044808301939093529181526140fe916140f9606483613175565b614452565b565b80600052600960205261411960026040600020016134aa565b816000526009602052604060002060ff600182015460a01c1660001461414c57506001600160801b039150602001511690565b5460f81c61415e57506140a190613682565b6140a191506001600160801b0360408183511692015116906131ed565b9190916040519061418b82613159565b600091828152826020820152936001600160801b03928383169182156142355767016345785d8a00008082116141fe57506141c78591846143a3565b16602087019281845211156141ea575090826141e5925116906131ed565b168252565b80634e487b7160e01b602492526001600452fd5b60449250604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b509394505050506040519061424982613159565b808252602082015290565b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff841117612907576140fe92604052614452565b670de0b6b3a764000091600019838309928083029283808610950394808603951461437f578285101561434357908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b50508092501561438d570490565b634e487b7160e01b600052601260045260246000fd5b9091906000198382098382029182808310920391808303921461444157670de0b6b3a7640000908183101561440a57947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b6001600160a01b03169061447d600080836020829551910182875af1614476614049565b90846144ee565b9081519182151592836144c6575b5050506144955750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b819293509060209181010312610a6757602001519081159182150361064c575038808061448b565b9061452d575080511561450357805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580614578575b61453e575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b1561453656fea164736f6c6343000817000a"; + hex"60a034620003b757601f19906001600160401b0390601f620049a33881900382810186168401919085831185841017620002d0578085926040948552833981010312620003b75781516001600160a01b038082169490929091859003620003b757602080940151928316809303620003b7576200007b620003bc565b93601c85527f5361626c696572205632204c6f636b7570204c696e656172204e46540000000081860152620000af620003bc565b96601188527029a0a116ab1916a627a1a5aaa816a624a760791b82890152306080528551848111620002d0576001968754908882811c92168015620003ac575b85831014620002af57818684931162000356575b508490868311600114620002f257600092620002e6575b5050600019600383901b1c191690871b1786555b8751938411620002d0576002548681811c91168015620002c5575b83821014620002af5783811162000263575b5081928411600114620001f65750508192939495600092620001ea575b5050600019600383901b1c191690831b176002555b60018060a01b03198381600054161760005560085416176008556040519160007fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a36007556145c69081620003dd8239608051816139480152f35b01519050388062000178565b839291921696600260005282600020926000905b8982106200024b575050838697989695961062000231575b505050811b016002556200018d565b015160001960f88460031b161c1916905538808062000222565b8088859682949686015181550195019301906200020a565b6002600052826000208480870160051c820192858810620002a5575b0160051c019087905b828110620002985750506200015b565b6000815501879062000288565b925081926200027f565b634e487b7160e01b600052602260045260246000fd5b90607f169062000149565b634e487b7160e01b600052604160045260246000fd5b0151905038806200011a565b90848a94169184600052866000209260005b888282106200033f575050841162000325575b505050811b0186556200012e565b015160001960f88460031b161c1916905538808062000317565b8385015186558d9790950194938401930162000304565b90915088600052846000208680850160051c820192878610620003a2575b918b91869594930160051c01915b8281106200039257505062000103565b600081558594508b910162000382565b9250819262000374565b91607f1691620000ef565b600080fd5b60408051919082016001600160401b03811183821017620002d05760405256fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a714612f5f57508063027b674414612f3c57806306fdde0314612e77578063081812fc14612e58578063095ea7b314612d5f5780631400ecec14612cbf5780631c1cdd4c14612c5a5780631e99d56914612c3c57806323b872dd14612c2457806340e58ee5146129a6578063425d30dd1461295557806342842e0e1461290557806342966c681461272a57806344267570146127035780634857501f1461268d5780634869e12d146126525780634cc55e11146121c257806353b15727146120a35780636352211e146120735780636d0cee751461207357806370a082311461200357806375829def14611f70578063780a82c814611f235780637cad6cd114611e295780637de6b1db14611c025780638659c270146118b1578063894e9a0d146115915780638f69b993146114f55780639067b677146114a557806395d89b4114611396578063a22cb465146112d9578063a80fc07114611287578063ab167ccc14611138578063ad35efd4146110d6578063b256456914611085578063b88d4fde14610ff8578063b8a3be6614610fc3578063b971302a14610f74578063bc2be1be14610f24578063c156a11d14610a77578063c87b56dd1461095b578063cc364f4814610890578063d4dbd20b1461083e578063d511609f146107f2578063d975dfed146107a6578063e985e9c514610751578063ea5ead1914610729578063eac8f5b8146106d7578063f590c17614610675578063f851a4401461064f5763fdd46d601461025257600080fd5b3461064c57606036600319011261064c576004359061026f61308e565b916102786131eb565b9261028161393e565b818352600960209181835260ff600160408720015460a81c16156106355783855281835260ff600160408720015460a01c1661061d576001600160a01b03958682169283156105f3576001600160801b03938483169081156105db57878952600387528960408a2054169283821415806105cb575b6105a757610303896140b1565b87811684116105755750888a5280885260408a20968360028d8a541699015460801c0181811161056157988b9c8b9c9a937f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d936103958e96859f8f6040816103909360029352878a5220019182906001600160801b036001600160801b031983549260801b169116179055565b6134e2565b906103b181868401511692826040818351169201511690613225565b161115610532575b848c528252600160408c20015416946103d3818a886140dc565b604051908152a48033141580610528575b6104ba575b8333141590816104af575b816104a4575b5061042e575b837ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78688604051908152a180f35b823b156104a057604051636fd110e960e01b8152600481018790523360248201526001600160a01b039290921660448301526001600160801b031660648201529082908290608490829084905af1610488575b8080610400565b6104919061310a565b61049c578238610481565b8280fd5b8380fd5b9050831415386103fa565b843b151591506103f4565b803b1561052457604051636fd110e960e01b8152600481018890523360248201526001600160a01b03841660448201526001600160801b03831660648201528590818160848183875af1610510575b50506103e9565b6105199061310a565b610524578438610509565b8480fd5b50803b15156103e4565b848c5280835260408c2060018101600160a01b60ff60a01b1982541617905560ff60f01b1981541690556103b9565b60248c634e487b7160e01b81526011600452fd5b60405163287ecaef60e21b8152600481018b90526001600160801b038781166024830152919091166044820152606490fd5b606489836040519163b34359d360e01b835260048301523360248301526044820152fd5b506105d58961399a565b156102f6565b6024886040519063d2aabcd960e01b82526004820152fd5b60046040517fc61a0e9e000000000000000000000000000000000000000000000000000000008152fd5b60248460405190634a5541ef60e01b82526004820152fd5b6024846040519062b8e7e760e51b82526004820152fd5b80fd5b503461064c578060031936011261064c576001600160a01b036020915416604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057816040916020935260098352205460f81c6040519015158152f35b6024906040519062b8e7e760e51b82526004820152fd5b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760016040836001600160a01b0393602095526009855220015416604051908152f35b503461064c57604036600319011261064c576004359061074761308e565b91610278816140b1565b503461064c57604036600319011261064c5761076b613078565b604061077561308e565b926001600160a01b0380931681526006602052209116600052602052602060ff604060002054166040519015158152f35b503461064c57602036600319011261064c5760ff6001604060043593848152600960205220015460a81c16156106c0576107e16020916140b1565b6001600160801b0360405191168152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057604082600292602094526009845220015460801c604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760036040836001600160801b0393602095526009855220015416604051908152f35b503461064c576020908160031936011261064c57600435916108b06134c3565b508282526009815260ff600160408420015460a81c16156109445760609282526009815264ffffffffff9182604082205460a01c1692600a835260408181842054169260098552205460c81c16916040519361090b8561313b565b8452830152604082015261094260405180926040908164ffffffffff91828151168552826020820151166020860152015116910152565bf35b6024836040519062b8e7e760e51b82526004820152fd5b503461064c57602080600319360112610a675760043561097a81613697565b50826001600160a01b0360085416916044604051809481937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa928315610a6b5780936109ea575b50506109e6604051928284938452830190613053565b0390f35b909192503d8082843e6109fd81846131ad565b8201918381840312610a675780519067ffffffffffffffff821161049c570182601f82011215610a6757805191610a33836131cf565b93610a4160405195866131ad565b83855285848401011161064c575090610a5f91848085019101613030565b9038806109d0565b5080fd5b604051903d90823e3d90fd5b503461064c57604036600319011261064c57600435610a9461308e565b610a9c61393e565b81835260099060209082825260ff600160408720015460a81c161561063557838552600382526001600160a01b03918260408720541693843303610f0557610ae3866140b1565b906001600160801b039081831680158015610b83575b50505050505081811615610b6b5783610b11916137f9565b90811680610b315760248460405190637e27328960e01b82526004820152fd5b8203610b3b578380f35b6040516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b60248560405190633250574960e11b82526004820152fd5b610b8b61393e565b898b5282865260ff600160408d20015460a81c1615610eee57898b5282865260ff600160408d20015460a01c16610ed65788156105f357610ebe57888a52600385528660408b205416918289141580610eae575b610e8a57610bec8a6140b1565b8481168311610e585750898b5280865260408b20938260028a87541696015460801c01818111610e445790610c538d9796959493928d8952838a52610390600260408b20019182906001600160801b036001600160801b031983549260801b169116179055565b90610c6f818a8401511692826040818351169201511690613225565b161115610e15575b8a86528652888a7f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d888b600160408b2001541694610cb68186886140dc565b604051908152a48033141580610e0b575b610da1575b813314159081610d96575b81610d8b575b50610d1a575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790604051868152a1388080808080610af9565b803b1561049c57604051636fd110e960e01b8152600481018990523360248201526001600160a01b03881660448201526001600160801b0392909216606483015282908290608490829084905af1610d73575b80610ce3565b610d7c9061310a565b610d87578538610d6d565b8580fd5b905081141538610cdd565b823b15159150610cd7565b803b156104a057604051636fd110e960e01b8152600481018a90523360248201526001600160a01b03891660448201526001600160801b03841660648201528490818160848183875af1610df7575b5050610ccc565b610e009061310a565b6104a0578338610df0565b50803b1515610cc7565b8a86528087526040862060018101600160a01b60ff60a01b1982541617905560ff60f01b198154169055610c77565b60248d634e487b7160e01b81526011600452fd5b60405163287ecaef60e21b8152600481018c90526001600160801b038781166024830152919091166044820152606490fd5b60648a8a6040519163b34359d360e01b835260048301523360248301526044820152fd5b50610eb88a61399a565b15610bdf565b6024896040519063d2aabcd960e01b82526004820152fd5b60248a60405190634a5541ef60e01b82526004820152fd5b60248a6040519062b8e7e760e51b82526004820152fd5b60405163216caf0d60e01b815260048101879052336024820152604490fd5b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760408264ffffffffff926020945260098452205460a01c16604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c0576040826001600160a01b03926020945260098452205416604051908152f35b503461064c57602036600319011261064c5760ff6001604060209360043581526009855220015460a81c166040519015158152f35b503461064c57608036600319011261064c57611012613078565b61101a61308e565b906064359067ffffffffffffffff82116104a057366023830112156104a05781600401359284611049856131cf565b9361105760405195866131ad565b8585523660248783010111610a6757856110829660246020930183880137850101526044359161352a565b80f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057600160408360ff93602095526009855220015460b01c166040519015158152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05761110f90613772565b60405190600581101561112457602092508152f35b602483634e487b7160e01b81526021600452fd5b503461064c5761014036600319011261064c5761115361393e565b61115b6134c3565b9064ffffffffff80421680845281611171613516565b1615611280578180611181613516565b8301165b16602085015260e43590828216820361127b5701166040830152600435916001600160a01b039182841680940361127b576024359083821680920361127b57604435906001600160801b03821680920361127b576064359085821680920361064c57506084359182151580930361127b5760a4359384151580950361127b57604051976112118961311e565b8852602088015260408701526060860152608085015260a084015260c083015260406101031936011261127b576040519161124b83613191565b61010435918216820361127b57826112739260209452610124358482015260e0820152613a03565b604051908152f35b600080fd5b8183611185565b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760026040836001600160801b0393602095526009855220015416604051908152f35b503461064c57604036600319011261064c576112f3613078565b6024359081151580920361127b576001600160a01b03169081156113655733835260066020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b602482604051907f5b08ba180000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064c578060031936011261064c5760405190806002549160018360011c926001851694851561149b575b60209586861081146114875785885287949392918790821561146557505060011461140b575b50506113f7925003836131ad565b6109e6604051928284938452830190613053565b90859250600282527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b85831061144d5750506113f7935082010138806113e9565b80548389018501528794508693909201918101611435565b92509350506113f794915060ff191682840152151560051b82010138806113e9565b602483634e487b7160e01b81526022600452fd5b93607f16936113c3565b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760408264ffffffffff926020945260098452205460c81c16604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05761152e90613772565b906005821015908161156f5760028314918215611583575b821561155a575b6020836040519015158152f35b90915061156f5750600460209114388061154d565b80634e487b7160e01b602492526021600452fd5b506003831491506000611546565b503461064c57602036600319011261064c57806101606040516115b381613157565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201526115f66134c3565b61014082015201526004358152600960205260ff600160408320015460a81c1615611899576004358152600960205260408120906116c460026040519361163c85613174565b80546001600160a01b038116865264ffffffffff8160a01c16602087015264ffffffffff8160c81c16604087015260ff8160f01c161515606087015260f81c1515608086015260ff60018201546001600160a01b03811660a0880152818160a01c16151560c0880152818160a81c16151560e088015260b01c161515610100860152016134e2565b6101208301526116d5600435613772565b6005811015611885576101606101c093600264ffffffffff931461187a575b610120810151936001600160a01b0360a083015116946004358252600a60205284604083205416918560408501511690606085015115159761010086015115159260c08701511515916001600160a01b03604060e08a015115159560036020522054166001600160a01b038951169b8960808d8f9c60200151169101511515926040519b6117818d613157565b8c5260208c015260408b015260608a0152608089015260a088015260c087015260e0860152610100850152610120840152610140830152828201526040519384526001600160a01b0360208201511660208501528260408201511660408501526060810151151560608501526080810151151560808501526001600160a01b0360a08201511660a08501528260c08201511660c085015260e0810151151560e08501526101008101511515610100850152610120810151151561012085015261014081015160406001600160801b03918281511661014088015282602082015116858801520151166101808501520151166101a0820152f35b8360608201526116f4565b602482634e487b7160e01b81526021600452fd5b602460405162b8e7e760e51b81526004356004820152fd5b503461064c57602080600319360112610a675760043567ffffffffffffffff811161049c576118e49036906004016130d9565b91906118ee61393e565b83925b8084106118fc578480f35b61190784828461349d565b359361191161393e565b848652600980855260ff90600190828260408b20015460a81c1615611beb57878952808752604089208281015460a01c8416156119605760248960405190634a5541ef60e01b82526004820152fd5b9790919293949596975460f81c611bd3576119918160005260096020526001600160a01b0360406000205416331490565b15611bb35761199f816136ba565b818a528289526119b4600260408c20016134e2565b906001600160801b0395868351168783161015611b9b57838c52848b5260408c205460f01c1615611b835791818a611a0585898f9a9998966119fb8c998387935116613225565b9501511690613225565b8386528482527f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa5060408720916040835499600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c161785558b83169a8b15611b6a575b60038096019c88169c8d6001600160801b03198254161790556001600160a01b0392838092169b8c9789522054169889965260408d2001541694611aaf8b85886140dc565b604080518881526001600160801b0392831660208201529290911690820152606090a47ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78a604051838152a1813b611b13575b5050505050506001019291906118f1565b813b15610d8757856084928195604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af1611b56575b80808080611b02565b611b5f9061310a565b610524578438611b4d565b818601600160a01b60ff60a01b19825416179055611a6a565b602483604051906339c6dc7360e21b82526004820152fd5b602484604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b81526004810191909152336024820152604490fd5b6024906040519063fe19f19f60e01b82526004820152fd5b6024886040519062b8e7e760e51b82526004820152fd5b503461064c57602080600319360112610a675760043590611c2161393e565b8183526009815260ff600160408520015460a81c1615611e1257611c4482613772565b6005811015611dfe5760048103611c6d5760248360405190634a5541ef60e01b82526004820152fd5b60038103611c8d576024836040519063fe19f19f60e01b82526004820152fd5b600214611de657611cb48260005260096020526001600160a01b0360406000205416331490565b15611dc7578183526009815260ff604084205460f01c1615611daf57818352600981526040832060ff60f01b19815416905582604051837f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f8380a2600383526001600160a01b03604083205416803b611d57575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce791604051908152a180f35b803b1561049c57816024818580947f450154640000000000000000000000000000000000000000000000000000000083528960048401525af1611d9b575b80611d28565b611da49061310a565b61049c578238611d95565b602482604051906339c6dc7360e21b82526004820152fd5b60405163216caf0d60e01b815260048101839052336024820152604490fd5b602482604051906322cad1af60e11b82526004820152fd5b602484634e487b7160e01b81526021600452fd5b6024826040519062b8e7e760e51b82526004820152fd5b503461064c57602036600319011261064c576004356001600160a01b039081811680910361049c5781835416338103611efa575060085491816001600160a01b03198416176008556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a26007546000198101908111611ee65760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a180f35b602482634e487b7160e01b81526011600452fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c05760408264ffffffffff9260209452600a8452205416604051908152f35b503461064c57602036600319011261064c57611f8a613078565b9080546001600160a01b0380821693338503611fdc576001600160a01b03199394501691829116178255337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808380a380f35b6040516331b339a960e21b81526001600160a01b0386166004820152336024820152604490fd5b503461064c57602036600319011261064c576001600160a01b03612025613078565b168015612042578160409160209352600483522054604051908152f35b602482604051907f89c62b640000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064c57602036600319011261064c576020612092600435613697565b6001600160a01b0360405191168152f35b503461064c5761016036600319011261064c576120be61393e565b604051906120cb8261311e565b6120d3613078565b82526120dd61308e565b60208301526120ea6131eb565b60408301526001600160a01b03906064358281168103610a67576060840152608435801515810361127b57608084015260a435801515810361127b5760a084015260603660c319011261064c57506040516121448161313b565b64ffffffffff60c435818116810361127b57825260e435818116810361127b57602083015261010435908116810361127b57604082015260c083015260406101231936011261127b576040519161219a83613191565b61012435918216820361127b57826112739260209452610144358482015260e0820152613a03565b503461064c57604036600319011261064c5767ffffffffffffffff60043581811161049c576121f59036906004016130d9565b90916024359081116104a05761220f9036906004016130d9565b61221761393e565b80830361261b57845b83811061222b578580f35b61223681858761349d565b359061224381868861349d565b35875260036020526001600160a01b0360408820541661226482858761349d565b35906001600160801b038216820361127b5761227e61393e565b838952600960205260ff600160408b20015460a81c161561063557838952600960205260ff600160408b20015460a01c1661061d5780156105f3576001600160801b038216156126035783895260036020526001600160a01b0360408a2054169182821415806125f3575b6125cf576122f6856140b1565b6001600160801b0381166001600160801b0383161161259f5750848a52600960205260408a20926001600160a01b038454169360026001600160801b03841691015460801c016001600160801b03811161056157906123878c959493928887526009602052610390600260408920019182906001600160801b036001600160801b031983549260801b169116179055565b6001600160801b036123ab8160208401511692826040818351169201511690613225565b16111561256e575b86855260096020526001600160a01b036001604087200154166123e06001600160801b03841685836140dc565b83887f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d60206040516001600160801b0388168152a48033141580612564575b6124fa575b8333141590816124ef575b816124e4575b50612472575b505050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce76020600193604051908152a101612220565b823b156104a057604051636fd110e960e01b8152600481018790523360248201526001600160a01b039290921660448301526001600160801b031660648201529082908290608490829084905af16124cc575b808061243b565b6124d59061310a565b6124e05786386124c5565b8680fd5b905083141538612435565b843b1515915061242f565b803b1561052457604051636fd110e960e01b8152600481018890523360248201526001600160a01b03841660448201526001600160801b03831660648201528590818160848183875af1612550575b5050612424565b6125599061310a565b610524578438612549565b50803b151561241f565b86855260096020526040852060018101600160a01b60ff60a01b1982541617905560ff60f01b1981541690556123b3565b60405163287ecaef60e21b8152600481018790526001600160801b03928316602482015291166044820152606490fd5b606485836040519163b34359d360e01b835260048301523360248301526044820152fd5b506125fd8561399a565b156122e9565b6024846040519063d2aabcd960e01b82526004820152fd5b82604491604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b503461064c57602036600319011261064c5760ff6001604060043593848152600960205220015460a81c16156106c0576107e1602091614138565b503461064c57602036600319011261064c5760043590818152600960205260ff600160408320015460a81c1615611e1257806126c883613772565b926005841015611885576002602094036126e9575b50506040519015158152f35b815260098352604090205460f01c60ff16905038806126dd565b503461064c578060031936011261064c5760206001600160a01b0360085416604051908152f35b503461064c57602080600319360112610a67576004359061274961393e565b8183526009815260ff600160408520015460a81c1615611e12578183526009815260ff600160408520015460a01c16156128d4576127868261399a565b15611dc75781600052600381526001600160a01b0380604060002054166009835260ff60016040600020015460b01c161590816128ca575b50806128c2575b6128aa577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79083600052600383526040600020541691821592831561286f575b846000526003825260406000206001600160a01b03198154169055846000604051927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4848152a1612857575080f35b60249060405190637e27328960e01b82526004820152fd5b61289085600052600560205260406000206001600160a01b03198154169055565b806000526004825260406000206000198154019055612805565b60248360405190630da9b01360e01b82526004820152fd5b5060006127c5565b90501515386127be565b602482604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064c57612914366130a4565b60405191602083019383851067ffffffffffffffff86111761293f576110829460405285845261352a565b634e487b7160e01b600052604160045260246000fd5b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057600160408360ff93602095526009855220015460a01c166040519015158152f35b503461064c576020908160031936011261064c57600435906129c661393e565b81815260099283815260ff600160408420015460a81c16156109445782825283815260408220600181015460a01c60ff1615612a145760248460405190634a5541ef60e01b82526004820152fd5b9284935460f81c611bd357612a3f8160005260096020526001600160a01b0360406000205416331490565b15611bb357612a4d816136ba565b93818452808352612a63600260408620016134e2565b916001600160801b0393848451168588161015611de65781865282815260ff604087205460f01c1615611daf57612ab1878683612aa78a9b838a9c9b9c5116613225565b9701511690613225565b908286528381526040862091825494600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87161784556003898316948515612c0a575b01988716988981546001600160801b0319161790556001600160a01b038096168097600385528760408b205416978893865260408b20600101541693612b3d8c84876140dc565b604080518981526001600160801b03938416602082015292909116908201528060608101037f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa5091a4604051908382527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce791a1823b612bb9578480f35b823b15610524576084928591604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af1612bfb575b81818080808480f35b612c049061310a565b81612bf2565b60018101600160a01b60ff60a01b19825416179055612af6565b503461064c57611082612c36366130a4565b91613254565b503461064c578060031936011261064c576020600754604051908152f35b503461064c57602036600319011261064c57600435808252600960205260ff600160408420015460a81c16156106c057612c9390613772565b90600582101561156f5760208215838115612cb4575b506040519015158152f35b600191501482612ca9565b503461064c57602036600319011261064c5760043590818152600960205260ff600160408320015460a81c1615611e1257602091604082828152600985522060ff815460f01c1680612d4d575b612d24575b50506001600160801b0360405191168152f35b612d4692506001600160801b036002612d4092015416916136ba565b90613225565b3880612d11565b5060ff600182015460a01c1615612d0c565b503461064c57604036600319011261064c57612d79613078565b602435612d8581613697565b33151580612e45575b80612e1b575b612deb5781906001600160a01b03809416938491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258680a48252600560205260408220906001600160a01b031982541617905580f35b60246040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152336004820152fd5b506001600160a01b038116845260066020526040842033855260205260ff60408520541615612d94565b50336001600160a01b0382161415612d8e565b503461064c57602036600319011261064c576020612092600435613201565b503461064c578060031936011261064c576040519080600191600154928360011c9260018516948515612f32575b602095868610811461148757858852879493929187908215611465575050600114612ed85750506113f7925003836131ad565b90859250600182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b858310612f1a5750506113f7935082010138806113e9565b80548389018501528794508693909201918101612f02565b93607f1693612ea5565b503461064c578060031936011261064c57602060405167016345785d8a00008152f35b905034610a67576020366003190112610a67576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361049c57602092507f80ac58cd000000000000000000000000000000000000000000000000000000008114908115613006575b8115612fdc575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438612fd5565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150612fce565b60005b8381106130435750506000910152565b8181015183820152602001613033565b9060209161306c81518092818552858086019101613030565b601f01601f1916010190565b600435906001600160a01b038216820361127b57565b602435906001600160a01b038216820361127b57565b606090600319011261127b576001600160a01b0390600435828116810361127b5791602435908116810361127b579060443590565b9181601f8401121561127b5782359167ffffffffffffffff831161127b576020808501948460051b01011161127b57565b67ffffffffffffffff811161293f57604052565b610100810190811067ffffffffffffffff82111761293f57604052565b6060810190811067ffffffffffffffff82111761293f57604052565b610180810190811067ffffffffffffffff82111761293f57604052565b610140810190811067ffffffffffffffff82111761293f57604052565b6040810190811067ffffffffffffffff82111761293f57604052565b90601f8019910116810190811067ffffffffffffffff82111761293f57604052565b67ffffffffffffffff811161293f57601f01601f191660200190565b604435906001600160801b038216820361127b57565b61320a81613697565b5060005260056020526001600160a01b036040600020541690565b6001600160801b03918216908216039190821161323e57565b634e487b7160e01b600052601160045260246000fd5b906001600160a01b03809116801561348557600091848352602091600383526040928284862054166009825260ff6001868820015460b01c1615908161347b575b5080613473575b61345c5786855260038152828486205416948733151593846133ac575b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7945087613374575b808352600484528683206001815401905581835260038452868320816001600160a01b0319825416179055877fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88519480a4878152a1831682036133465750505050565b516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b61339582600052600560205260406000206001600160a01b03198154169055565b8783526004845286832080546000190190556132e2565b9192938091509061341b575b156133c657908783926132b9565b8488876133e3576024915190637e27328960e01b82526004820152fd5b90517f177e802f0000000000000000000000000000000000000000000000000000000081523360048201526024810191909152604490fd5b503386148015613440575b806133b857508782526005835233848684205416146133b8565b5085825260068352848220338352835260ff8583205416613426565b602487855190630da9b01360e01b82526004820152fd5b50600161329c565b9050151538613295565b6024604051633250574960e11b815260006004820152fd5b91908110156134ad5760051b0190565b634e487b7160e01b600052603260045260246000fd5b604051906134d08261313b565b60006040838281528260208201520152565b906040516134ef8161313b565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b60c43564ffffffffff8116810361127b5790565b9190613537828285613254565b803b613544575b50505050565b6135a06001600160a01b03809216946040519384937f150b7a0200000000000000000000000000000000000000000000000000000000968786523360048701521660248501526044840152608060648401526084830190613053565b03906020816000938185885af190829082613636575b50506135ed57826135c5614081565b80519190826135e65760248260405190633250574960e11b82526004820152fd5b9050602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000160361361e57503880808061353e565b60249060405190633250574960e11b82526004820152fd5b909192506020813d60201161368f575b81613653602093836131ad565b81010312610a675751907fffffffff000000000000000000000000000000000000000000000000000000008216820361064c57509038806135b6565b3d9150613646565b8060005260036020526001600160a01b0360406000205416908115612857575090565b600090808252600a60205264ffffffffff9182604082205416421061376c5760096020526040812092835490808260c81c1691824210156137565761370b9394955060a01c168091039042036142fb565b9082815260096020526001600160801b03926137318460026040852001541680946143db565b92831161373e5750501690565b60029350604092508152600960205220015460801c90565b505050505060026001600160801b039101541690565b91505090565b806000526009602052604060002060ff600182015460a01c16600014613799575050600490565b805460f81c6137f2575460a01c64ffffffffff1642106137ec576137bc816136ba565b9060005260096020526001600160801b0380600260406000200154169116106000146137e757600190565b600290565b50600090565b5050600390565b916000828152602090600382526001600160a01b036040958187842054166009855260ff6001898620015460b01c16159081613934575b5080613929575b613912579480967ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79596828552600386527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef848387205416948592836138da575b1692836138c4575b84875260038852808720846001600160a01b0319825416179055519580a4948152a1565b83875260048852808720600181540190556138a0565b6138fb86600052600560205260406000206001600160a01b03198154169055565b838852600489528488208054600019019055613898565b602486885190630da9b01360e01b82526004820152fd5b508181161515613837565b9050151538613830565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361397057565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b60009080825260036020526001600160a01b0380604084205416928333149384156139df575b505082156139cd57505090565b9091506139da3392613201565b161490565b60ff92945090604091815260066020528181203382526020522054169138806139c0565b90613a246001600160801b03604084015116602060e08501510151906141b3565b916001600160801b0383511660c082015190156140575764ffffffffff8151161561402d5764ffffffffff81511690604081019164ffffffffff8351169081811015613fed575050602081019064ffffffffff8251169081151580613fdb575b613f9a57505064ffffffffff90511664ffffffffff8251169081811015613f5a57505064ffffffffff8042169151169081811015613f1a575050600754926001600160801b0381511660405190613ada8261313b565b815260006020820152600060408201526001600160a01b036060840151169060c08401519164ffffffffff604084015116906080860151151560a087015115159264ffffffffff6001600160a01b0389511696511660405196613b3c88613174565b87526020870152604086015260608501526000608085015260a0840152600060c0840152600160e08401526101008301526101208201528460005260096020526040600020906001600160a01b0381511678ffffffffff0000000000000000000000000000000000000000602083015160a01b16907dffffffffff00000000000000000000000000000000000000000000000000604084015160c81b167eff0000000000000000000000000000000000000000000000000000000000006060850151151560f01b16917fff000000000000000000000000000000000000000000000000000000000000006080860151151560f81b1693171717178255600182016001600160a01b0360a08301511681549074ff000000000000000000000000000000000000000060c0850151151560a01b1675ff00000000000000000000000000000000000000000060e0860151151560a81b16917fffffffffffffffffff000000000000000000000000000000000000000000000076ff00000000000000000000000000000000000000000000610100880151151560b01b1694161717171790556001600160801b03604060036101206002860194015194613d3484875116956001600160801b03199687825416178155856020890151166001600160801b036001600160801b031983549260801b169116179055565b01930151169082541617905564ffffffffff602060c084015101511680613efc575b50600184016007556001600160a01b03602083015116801561348557613d84856001600160a01b03926137f9565b16613ecb57613daf6001600160a01b036060840151166001600160801b03835116903090339061428c565b6001600160801b0360208201511680613e9c575b506001600160a01b038251167f44cb432df42caa86b7ec73644ab8aec922bc44c71c98fc330addc75b88adbc7c610140866001600160a01b0360208701511694613e936001600160a01b03606089015116976080810151151560a08201511515906001600160801b0360206001600160a01b0360e060c087015196015151169660405198895233828a01528281511660408a01520151166060870152608086015260a085015260c08401906040908164ffffffffff91828151168552826020820151166020860152015116910152565b610120820152a4565b613ec5906001600160a01b036060850151166001600160a01b0360e0860151511690339061428c565b38613dc3565b60246040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152fd5b600a60205260406000209064ffffffffff1982541617905538613d56565b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b6040517f9fee269100000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b516040517fb39831ea00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b508164ffffffffff8251161015613a84565b6040517f5057f08400000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b60046040517f62201b50000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b3d156140ac573d90614092826131cf565b916140a060405193846131ad565b82523d6000602084013e565b606090565b6140d9906140be81614138565b90600052600960205260026040600020015460801c90613225565b90565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b03929092166024830152604480830193909352918152614136916141316064836131ad565b61448a565b565b80600052600960205261415160026040600020016134e2565b816000526009602052604060002060ff600182015460a01c1660001461418457506001600160801b039150602001511690565b5460f81c61419657506140d9906136ba565b6140d991506001600160801b036040818351169201511690613225565b919091604051906141c382613191565b600091828152826020820152936001600160801b039283831691821561426d5767016345785d8a000080821161423657506141ff8591846143db565b16602087019281845211156142225750908261421d92511690613225565b168252565b80634e487b7160e01b602492526001600452fd5b60449250604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b509394505050506040519061428182613191565b808252602082015290565b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff84111761293f576141369260405261448a565b670de0b6b3a76400009160001983830992808302928380861095039480860395146143b7578285101561437b57908291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b82606492604051927f63a05778000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b5050809250156143c5570490565b634e487b7160e01b600052601260045260246000fd5b9091906000198382098382029182808310920391808303921461447957670de0b6b3a7640000908183101561444257947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b6001600160a01b0316906144b5600080836020829551910182875af16144ae614081565b9084614526565b9081519182151592836144fe575b5050506144cd5750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b819293509060209181010312610a6757602001519081159182150361064c57503880806144c3565b90614565575080511561453b57805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b815115806145b0575b614576575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b1561456e56fea164736f6c6343000817000a"; bytes public constant BYTECODE_LOCKUP_TRANCHED = - hex"60c034620003dc576001600160401b0390601f601f1962004d983881900383810183168501919086831186841017620002f557808692606094604052833981010312620003dc5782516001600160a01b038082169590929091869003620003dc5760209485810151938416809403620003dc57604001519362000081620003e1565b95601e87527f5361626c696572205632204c6f636b7570205472616e63686564204e4654000081880152620000b5620003e1565b9060118252705341422d56322d4c4f434b55502d54524160781b81830152306080528751858111620002f5576001988954908a82811c92168015620003d1575b84831014620002d45781868493116200037b575b50839086831160011462000317576000926200030b575b5050600019600383901b1c191690891b1788555b8151948511620002f557600254938885811c95168015620002ea575b82861014620002d457848487961162000277575b50819385116001146200020d57505060009262000201575b5050600019600383901b1c191690841b176002555b60018060a01b03198481600054161760005560085416176008556040519260007fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a360a052600755614996908162000402823960805181613da3015260a051818181612e810152613e430152f35b0151905038806200017c565b88959392919316600260005283600020936000905b8282106200025d575050841162000243575b505050811b0160025562000191565b015160001960f88460031b161c1916905538808062000234565b8484015186558a9790950194938401939081019062000222565b9091929394506002600052826000208580880160051c820192858910620002ca575b9188978c9297969594930160051c01915b828110620002ba57505062000164565b600081558897508b9101620002aa565b9250819262000299565b634e487b7160e01b600052602260045260246000fd5b94607f169462000150565b634e487b7160e01b600052604160045260246000fd5b01519050388062000120565b90878c94169184600052856000209260005b878282106200036457505084116200034a575b505050811b01885562000134565b015160001960f88460031b161c191690553880806200033c565b8385015186558f9790950194938401930162000329565b9091508a600052836000208680850160051c820192868610620003c7575b918d91869594930160051c01915b828110620003b757505062000109565b600081558594508d9101620003a7565b9250819262000399565b91607f1691620000f5565b600080fd5b60408051919082016001600160401b03811183821017620002f55760405256fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a7146131df57508063027b6744146131bc57806306fdde03146130f7578063081812fc146130d8578063095ea7b314612fdf5780631400ecec14612f3f5780631c1cdd4c14612eda5780631e99d56914612ebc57806323b872dd14612ea45780632fe4304114612e6957806332fbe22b14612d1157806340e58ee514612a73578063425d30dd14612a2257806342842e0e146129e857806342966c681461280d57806344267570146127e65780634857501f146127705780634869e12d146127355780634cc55e11146122b95780636352211e146122895780636d0cee751461228957806370a082311461221957806375829def146121865780637cad6cd11461208c5780637de6b1db14611e655780637f5799f914611e0a5780638659c27014611ab0578063894e9a0d1461175b578063897f362b146114ab5780638f69b9931461140f5780639067b677146113bf57806395d89b41146112b0578063a22cb465146111f3578063a80fc071146111a1578063ad35efd41461113f578063b2564569146110ee578063b88d4fde14611061578063b8a3be661461102c578063b971302a14610fdd578063bc2be1be14610f8d578063c156a11d14610af6578063c87b56dd146109da578063cc364f4814610942578063d4dbd20b146108f0578063d511609f146108a4578063d975dfed14610858578063e985e9c514610803578063ea5ead1914610721578063eac8f5b8146106cf578063f590c1761461066d578063f851a440146106475763fdd46d601461025d57600080fd5b34610644576060366003190112610644576004359061027a61330e565b91604435926001600160801b038085169182860361063f5761029a613d99565b83855260099560209387855260ff600160408920015460a81c16156106285785875287855260ff600160408920015460a01c16610610576001600160a01b039081841680156105e65781156105ce57878952600387528260408a2054169283821415806105be575b61059a5761030f89614546565b8781168411610568575097899a888b999a83809d5282825260408b209988828c54169b6002015460801c9061034391614571565b858d5284845260408d20600201908282549160801b6fffffffffffffffffffffffffffffffff19169116178155610379906138b5565b90808483015116918180825116916040015116610395916134f6565b161115927f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d93610539575b848c528252600160408c20015416946103da818a886146d6565b604051908152a4803314158061052f575b6104c1575b8333141590816104b6575b816104ab575b50610435575b837ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78688604051908152a180f35b823b156104a757604051636fd110e960e01b8152600481018790523360248201526001600160a01b039290921660448301526001600160801b031660648201529082908290608490829084905af161048f575b8080610407565b61049890613417565b6104a3578238610488565b8280fd5b8380fd5b905083141538610401565b843b151591506103fb565b803b1561052b57604051636fd110e960e01b8152600481018890523360248201526001600160a01b03841660448201526001600160801b03831660648201528590818160848183875af1610517575b50506103f0565b61052090613417565b61052b578438610510565b8480fd5b50803b15156103eb565b848c5280835260408c2060018101600160a01b60ff60a01b1982541617905560ff60f01b1981541690556103c0565b60405163287ecaef60e21b8152600481018b90526001600160801b038781166024830152919091166044820152606490fd5b606489836040519163b34359d360e01b835260048301523360248301526044820152fd5b506105c8896144ad565b15610302565b6024886040519063d2aabcd960e01b82526004820152fd5b60046040517fc61a0e9e000000000000000000000000000000000000000000000000000000008152fd5b60248660405190634a5541ef60e01b82526004820152fd5b6024866040519062b8e7e760e51b82526004820152fd5b600080fd5b80fd5b50346106445780600319360112610644576001600160a01b036020915416604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857816040916020935260098352205460f81c6040519015158152f35b6024906040519062b8e7e760e51b82526004820152fd5b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760016040836001600160a01b0393602095526009855220015416604051908152f35b5034610644576040366003190112610644576004359061073f61330e565b9161074981614546565b92610752613d99565b81835260099360209185835260ff600160408720015460a81c16156107ec5783855285835260ff600160408720015460a01c166107d4576001600160a01b03918282169283156105e6576001600160801b03938483169081156105ce57878952600387528260408a2054169283821415806105be5761059a5761030f89614546565b60248460405190634a5541ef60e01b82526004820152fd5b6024846040519062b8e7e760e51b82526004820152fd5b50346106445760403660031901126106445761081d6132f8565b604061082761330e565b926001600160a01b0380931681526006602052209116600052602052602060ff604060002054166040519015158152f35b50346106445760203660031901126106445760ff6001604060043593848152600960205220015460a81c16156106b857610893602091614546565b6001600160801b0360405191168152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857604082600292602094526009845220015460801c604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760036040836001600160801b0393602095526009855220015416604051908152f35b5034610644576020366003190112610644576004356000602060405161096781613464565b8281520152808252600960205260ff600160408420015460a81c16156106b857604082819281526009602052205464ffffffffff8251916109a783613464565b818160a01c16835260c81c1660208201526109d8825180926020908164ffffffffff91828151168552015116910152565bf35b503461064457602080600319360112610ae6576004356109f981613a77565b50826001600160a01b0360085416916044604051809481937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa928315610aea578093610a69575b5050610a656040519282849384528301906132d3565b0390f35b909192503d8082843e610a7c8184613480565b8201918381840312610ae65780519067ffffffffffffffff82116104a3570182601f82011215610ae657805191610ab2836134a2565b93610ac06040519586613480565b838552858484010111610644575090610ade918480850191016132b0565b903880610a4f565b5080fd5b604051903d90823e3d90fd5b503461064457604036600319011261064457600435610b1361330e565b610b1b613d99565b81835260099060209082825260ff600160408720015460a81c16156107ec57838552600382526001600160a01b03918260408720541693843303610f6e57610b6286614546565b906001600160801b039081831680158015610c02575b50505050505081811615610bea5783610b9091613c54565b90811680610bb05760248460405190637e27328960e01b82526004820152fd5b8203610bba578380f35b6040516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b60248560405190633250574960e11b82526004820152fd5b610c0a613d99565b898b5282865260ff600160408d20015460a81c1615610f5757898b5282865260ff600160408d20015460a01c16610f3f5788156105e657610f2757888a52600385528660408b205416918289141580610f17575b610ef357610c6b8a614546565b8481168311610ec15750908a949392918a86528087526040862093610cd0610c9e8760028d89541698015460801c614571565b8d8952838a52600260408a200190836fffffffffffffffffffffffffffffffff1983549260801b1691161781556138b5565b90610cec818a84015116928260408183511692015116906134f6565b161115610e92575b8a86528652888a7f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d888b600160408b2001541694610d338186886146d6565b604051908152a48033141580610e88575b610e1e575b813314159081610e13575b81610e08575b50610d97575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790604051868152a1388080808080610b78565b803b156104a357604051636fd110e960e01b8152600481018990523360248201526001600160a01b03881660448201526001600160801b0392909216606483015282908290608490829084905af1610df0575b80610d60565b610df990613417565b610e04578538610dea565b8580fd5b905081141538610d5a565b823b15159150610d54565b803b156104a757604051636fd110e960e01b8152600481018a90523360248201526001600160a01b03891660448201526001600160801b03841660648201528490818160848183875af1610e74575b5050610d49565b610e7d90613417565b6104a7578338610e6d565b50803b1515610d44565b8a86528087526040862060018101600160a01b60ff60a01b1982541617905560ff60f01b198154169055610cf4565b60405163287ecaef60e21b8152600481018c90526001600160801b038781166024830152919091166044820152606490fd5b60648a8a6040519163b34359d360e01b835260048301523360248301526044820152fd5b50610f218a6144ad565b15610c5e565b6024896040519063d2aabcd960e01b82526004820152fd5b60248a60405190634a5541ef60e01b82526004820152fd5b60248a6040519062b8e7e760e51b82526004820152fd5b60405163216caf0d60e01b815260048101879052336024820152604490fd5b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760408264ffffffffff926020945260098452205460a01c16604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b8576040826001600160a01b03926020945260098452205416604051908152f35b50346106445760203660031901126106445760ff6001604060209360043581526009855220015460a81c166040519015158152f35b50346106445760803660031901126106445761107b6132f8565b61108361330e565b906064359067ffffffffffffffff82116104a757366023830112156104a757816004013592846110b2856134a2565b936110c06040519586613480565b8585523660248783010111610ae657856110eb9660246020930183880137850101526044359161390a565b80f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857600160408360ff93602095526009855220015460b01c166040519015158152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85761117890613bcd565b60405190600581101561118d57602092508152f35b602483634e487b7160e01b81526021600452fd5b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760026040836001600160801b0393602095526009855220015416604051908152f35b50346106445760403660031901126106445761120d6132f8565b6024359081151580920361063f576001600160a01b031690811561127f5733835260066020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b602482604051907f5b08ba180000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064457806003193601126106445760405190806002549160018360011c92600185169485156113b5575b60209586861081146113a15785885287949392918790821561137f575050600114611325575b505061131192500383613480565b610a656040519282849384528301906132d3565b90859250600282527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b85831061136757505061131193508201013880611303565b8054838901850152879450869390920191810161134f565b925093505061131194915060ff191682840152151560051b8201013880611303565b602483634e487b7160e01b81526022600452fd5b93607f16936112dd565b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760408264ffffffffff926020945260098452205460c81c16604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85761144890613bcd565b9060058210159081611489576002831491821561149d575b8215611474575b6020836040519015158152f35b90915061148957506004602091143880611467565b80634e487b7160e01b602492526021600452fd5b506003831491506000611460565b5034610644576020906003198281360112610ae6576004359167ffffffffffffffff91828411610ae65761012084360391820112610ae6576114eb613d99565b60c48401359060221901811215610ae65783016004810135928311610ae65760248101908360061b80360383136104a75760249061152886613780565b956115366040519788613480565b8652878601920101913683116104a757905b86838310611743575050505081519061156082613780565b9261156e6040519485613480565b828452601f1961157d84613780565b0186835b82811061171f5750505064ffffffffff804216936001600160801b0392836115a882613a9a565b51511683808b6115b785613a9a565b51015116880116604051916115cb83613464565b82528a8201526115da88613a9a565b526115e487613a9a565b5060019260015b8381106116b6575050505050611603856004016138e9565b91611610602487016138e9565b9161161d60448801613823565b6064880135926001600160a01b039081851680950361064457509288959261166e9895926116a3989561165560846116ae9d016138fd565b948161166360a48c016138fd565b976040519d8e6133fa565b168c52168c8b0152166040890152606088015215156080870152151560a086015260c085015260e084015260e43691016137ce565b610100820152613df5565b604051908152f35b8089838d8180826116db8d6116cc8e9a8d613aa7565b51511696600019890190613aa7565b51015116916116ea868a613aa7565b510151160116604051916116fd83613464565b82528d82015261170d828c613aa7565b52611718818b613aa7565b50016115eb565b60405161172b81613464565b60008152600083820152828289010152018790611581565b6040916117503685613798565b815201910190611548565b503461064457602036600319011261064457606061014060405161177e8161342b565b83815283602082015283604082015283838201528360808201528360a08201528360c08201528360e0820152836101008201526040516117bd81613448565b84815284602082015284604082015261012082015201526004358152600960205260ff600160408320015460a81c1615611a985760043581526009602052604081209060405191610140830183811067ffffffffffffffff821117611a82576118ae9160029160405280546001600160a01b038116865264ffffffffff8160a01c16602087015264ffffffffff8160c81c16604087015260ff8160f01c161515606087015260f81c1515608086015260ff60018201546001600160a01b03811660a0880152818160a01c16151560c0880152818160a81c16151560e088015260b01c161515610100860152016138b5565b6101208301526118bf600435613bcd565b6005811015611a6e5761014092600261198b9214611a63575b6101208101516001600160a01b0360a08301511664ffffffffff60408401511694606084015115159061010085015115159260c086015115159160e08701511515936001600160a01b03885116996080604064ffffffffff60208c015116946004358152600a602052209901511515926040519b6119558d61342b565b8c5260208c015260408b015260608a0152608089015260a088015260c087015260e0860152610100850152610120840152613837565b82820152610a65604051928392602084526001600160a01b03815116602085015264ffffffffff602082015116604085015264ffffffffff60408201511660608501526060810151151560808501526080810151151560a08501526001600160a01b0360a08201511660c085015260c0810151151560e085015260e08101511515610100850152610100810151151561012085015261012081015160406001600160801b039182815116858801528260208201511661016088015201511661018085015201516101a0808401526101c083019061339e565b8260608201526118d8565b602482634e487b7160e01b81526021600452fd5b634e487b7160e01b600052604160045260246000fd5b602460405162b8e7e760e51b81526004356004820152fd5b503461064457602080600319360112610ae65760043567ffffffffffffffff81116104a357611ae390369060040161336d565b9190611aed613d99565b83925b808410611afb578480f35b611b068482846137fd565b3593611b10613d99565b848652600980855260ff90600190828260408b20015460a81c1615611df357878952808752604089208281015460a01c841615611b5f5760248960405190634a5541ef60e01b82526004820152fd5b9790919293949596975460f81c611ddb57611b908160005260096020526001600160a01b0360406000205416331490565b15611dbb57611b9e81613abb565b818a52828952611bb3600260408c20016138b5565b906001600160801b0395868351168783161015611da357838c52848b5260408c205460f01c1615611d8b5791818a611c0485898f9a999896611bfa8c9983879351166134f6565b95015116906134f6565b8386528482527f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa5060408720916040835499600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c161785558b83169a8b15611d72575b60038096019c88169c8d6fffffffffffffffffffffffffffffffff198254161790556001600160a01b0392838092169b8c9789522054169889965260408d2001541694611cb78b85886146d6565b604080518881526001600160801b0392831660208201529290911690820152606090a47ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78a604051838152a1813b611d1b575b505050505050600101929190611af0565b813b15610e0457856084928195604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af1611d5e575b80808080611d0a565b611d6790613417565b61052b578438611d55565b818601600160a01b60ff60a01b19825416179055611c69565b602483604051906339c6dc7360e21b82526004820152fd5b602484604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b81526004810191909152336024820152604490fd5b6024906040519063fe19f19f60e01b82526004820152fd5b6024886040519062b8e7e760e51b82526004820152fd5b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857604082611e5192610a659452600a60205220613837565b60405191829160208352602083019061339e565b503461064457602080600319360112610ae65760043590611e84613d99565b8183526009815260ff600160408520015460a81c161561207557611ea782613bcd565b60058110156120615760048103611ed05760248360405190634a5541ef60e01b82526004820152fd5b60038103611ef0576024836040519063fe19f19f60e01b82526004820152fd5b60021461204957611f178260005260096020526001600160a01b0360406000205416331490565b1561202a578183526009815260ff604084205460f01c161561201257818352600981526040832060ff60f01b19815416905582604051837f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f8380a2600383526001600160a01b03604083205416803b611fba575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce791604051908152a180f35b803b156104a357816024818580947f450154640000000000000000000000000000000000000000000000000000000083528960048401525af1611ffe575b80611f8b565b61200790613417565b6104a3578238611ff8565b602482604051906339c6dc7360e21b82526004820152fd5b60405163216caf0d60e01b815260048101839052336024820152604490fd5b602482604051906322cad1af60e11b82526004820152fd5b602484634e487b7160e01b81526021600452fd5b6024826040519062b8e7e760e51b82526004820152fd5b5034610644576020366003190112610644576004356001600160a01b03908181168091036104a3578183541633810361215d575060085491816001600160a01b03198416176008556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a260075460001981019081116121495760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a180f35b602482634e487b7160e01b81526011600452fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b5034610644576020366003190112610644576121a06132f8565b9080546001600160a01b03808216933385036121f2576001600160a01b03199394501691829116178255337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808380a380f35b6040516331b339a960e21b81526001600160a01b0386166004820152336024820152604490fd5b5034610644576020366003190112610644576001600160a01b0361223b6132f8565b168015612258578160409160209352600483522054604051908152f35b602482604051907f89c62b640000000000000000000000000000000000000000000000000000000082526004820152fd5b50346106445760203660031901126106445760206122a8600435613a77565b6001600160a01b0360405191168152f35b50346106445760403660031901126106445767ffffffffffffffff6004358181116104a3576122ec90369060040161336d565b90916024359081116104a75761230690369060040161336d565b61230e613d99565b8083036126fe57845b838110612322578580f35b61232d8185876137fd565b359061233a8186886137fd565b35875260036020526001600160a01b0360408820541661236361235e8386886137fd565b613823565b9061236c613d99565b838952600960205260ff600160408b20015460a81c16156107ec57838952600960205260ff600160408b20015460a01c166107d45780156105e6576001600160801b038216156126e65783895260036020526001600160a01b0360408a2054169182821415806126d6575b6126b2576123e485614546565b6001600160801b0381166001600160801b038316116126825750908992918584526009602052604084209261246a6001600160a01b03855416946002809101546001600160801b036fffffffffffffffffffffffffffffffff1961244c87608094851c614571565b938c8b52600960205260408b2001938454931b1691161781556138b5565b6001600160801b0361248e81602084015116928260408183511692015116906134f6565b161115612651575b86855260096020526001600160a01b036001604087200154166124c36001600160801b03841685836146d6565b83887f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d60206040516001600160801b0388168152a48033141580612647575b6125dd575b8333141590816125d2575b816125c7575b50612555575b505050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce76020600193604051908152a101612317565b823b156104a757604051636fd110e960e01b8152600481018790523360248201526001600160a01b039290921660448301526001600160801b031660648201529082908290608490829084905af16125af575b808061251e565b6125b890613417565b6125c35786386125a8565b8680fd5b905083141538612518565b843b15159150612512565b803b1561052b57604051636fd110e960e01b8152600481018890523360248201526001600160a01b03841660448201526001600160801b03831660648201528590818160848183875af1612633575b5050612507565b61263c90613417565b61052b57843861262c565b50803b1515612502565b86855260096020526040852060018101600160a01b60ff60a01b1982541617905560ff60f01b198154169055612496565b60405163287ecaef60e21b8152600481018790526001600160801b03928316602482015291166044820152606490fd5b606485836040519163b34359d360e01b835260048301523360248301526044820152fd5b506126e0856144ad565b156123d7565b6024846040519063d2aabcd960e01b82526004820152fd5b82604491604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50346106445760203660031901126106445760ff6001604060043593848152600960205220015460a81c16156106b857610893602091614730565b50346106445760203660031901126106445760043590818152600960205260ff600160408320015460a81c161561207557806127ab83613bcd565b926005841015611a6e576002602094036127cc575b50506040519015158152f35b815260098352604090205460f01c60ff16905038806127c0565b503461064457806003193601126106445760206001600160a01b0360085416604051908152f35b503461064457602080600319360112610ae6576004359061282c613d99565b8183526009815260ff600160408520015460a81c1615612075578183526009815260ff600160408520015460a01c16156129b757612869826144ad565b1561202a5781600052600381526001600160a01b0380604060002054166009835260ff60016040600020015460b01c161590816129ad575b50806129a5575b61298d577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790836000526003835260406000205416918215928315612952575b846000526003825260406000206001600160a01b03198154169055846000604051927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4848152a161293a575080f35b60249060405190637e27328960e01b82526004820152fd5b61297385600052600560205260406000206001600160a01b03198154169055565b8060005260048252604060002060001981540190556128e8565b60248360405190630da9b01360e01b82526004820152fd5b5060006128a8565b90501515386128a1565b602482604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b5034610644576129f736613338565b60405191602083019383851067ffffffffffffffff861117611a82576110eb9460405285845261390a565b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857600160408360ff93602095526009855220015460a01c166040519015158152f35b503461064457602090816003193601126106445760043590612a93613d99565b81815260099283815260ff600160408420015460a81c1615612cfa5782825283815260408220600181015460a01c60ff1615612ae15760248460405190634a5541ef60e01b82526004820152fd5b9284935460f81c611ddb57612b0c8160005260096020526001600160a01b0360406000205416331490565b15611dbb57612b1a81613abb565b93818452808352612b30600260408620016138b5565b916001600160801b03938484511685881610156120495781865282815260ff604087205460f01c161561201257612b7e878683612b748a9b838a9c9b9c51166134f6565b97015116906134f6565b908286528381526040862091825494600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87161784556003898316948515612ce0575b01988716988981546fffffffffffffffffffffffffffffffff19161790556001600160a01b038096168097600385528760408b205416978893865260408b20600101541693612c138c84876146d6565b604080518981526001600160801b03938416602082015292909116908201528060608101037f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa5091a4604051908382527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce791a1823b612c8f578480f35b823b1561052b576084928591604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af1612cd1575b81818080808480f35b612cda90613417565b81612cc8565b60018101600160a01b60ff60a01b19825416179055612bc3565b6024836040519062b8e7e760e51b82526004820152fd5b5034610644576003199060203683018113610ae6576004359167ffffffffffffffff93848411610ae65761014090843603011261064457612d50613d99565b60405193612d5d856133fa565b612d6984600401613324565b8552612d7760248501613324565b6020860152612d88604485016134be565b604086015260648401356001600160a01b03811681036104a3576060860152612db3608485016133ed565b6080860152612dc460a485016133ed565b60a0860152612dd560c4850161376e565b60c086015260e4840135908111610ae65783019136602384011215610ae6576004830135612e0281613780565b93612e106040519586613480565b8185526024602086019260061b820101933685116106445750602401905b838210612e505760206116ae886116a3898960e08401526101043691016137ce565b82604091612e5e3685613798565b815201910190612e2e565b503461064457806003193601126106445760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610644576110eb612eb636613338565b91613525565b50346106445780600319360112610644576020600754604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857612f1390613bcd565b9060058210156114895760208215838115612f34575b506040519015158152f35b600191501482612f29565b50346106445760203660031901126106445760043590818152600960205260ff600160408320015460a81c161561207557602091604082828152600985522060ff815460f01c1680612fcd575b612fa4575b50506001600160801b0360405191168152f35b612fc692506001600160801b036002612fc09201541691613abb565b906134f6565b3880612f91565b5060ff600182015460a01c1615612f8c565b503461064457604036600319011261064457612ff96132f8565b60243561300581613a77565b331515806130c5575b8061309b575b61306b5781906001600160a01b03809416938491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258680a48252600560205260408220906001600160a01b031982541617905580f35b60246040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152336004820152fd5b506001600160a01b038116845260066020526040842033855260205260ff60408520541615613014565b50336001600160a01b038216141561300e565b50346106445760203660031901126106445760206122a86004356134d2565b50346106445780600319360112610644576040519080600191600154928360011c92600185169485156131b2575b60209586861081146113a15785885287949392918790821561137f57505060011461315857505061131192500383613480565b90859250600182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b85831061319a57505061131193508201013880611303565b80548389018501528794508693909201918101613182565b93607f1693613125565b5034610644578060031936011261064457602060405167016345785d8a00008152f35b905034610ae6576020366003190112610ae6576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036104a357602092507f80ac58cd000000000000000000000000000000000000000000000000000000008114908115613286575b811561325c575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438613255565b7f5b5e139f000000000000000000000000000000000000000000000000000000008114915061324e565b60005b8381106132c35750506000910152565b81810151838201526020016132b3565b906020916132ec815180928185528580860191016132b0565b601f01601f1916010190565b600435906001600160a01b038216820361063f57565b602435906001600160a01b038216820361063f57565b35906001600160a01b038216820361063f57565b606090600319011261063f576001600160a01b0390600435828116810361063f5791602435908116810361063f579060443590565b9181601f8401121561063f5782359167ffffffffffffffff831161063f576020808501948460051b01011161063f57565b90815180825260208080930193019160005b8281106133be575050505090565b835180516001600160801b0316865282015164ffffffffff1685830152604090940193928101926001016133b0565b3590811515820361063f57565b610120810190811067ffffffffffffffff821117611a8257604052565b67ffffffffffffffff8111611a8257604052565b610160810190811067ffffffffffffffff821117611a8257604052565b6060810190811067ffffffffffffffff821117611a8257604052565b6040810190811067ffffffffffffffff821117611a8257604052565b90601f8019910116810190811067ffffffffffffffff821117611a8257604052565b67ffffffffffffffff8111611a8257601f01601f191660200190565b35906001600160801b038216820361063f57565b6134db81613a77565b5060005260056020526001600160a01b036040600020541690565b6001600160801b03918216908216039190821161350f57565b634e487b7160e01b600052601160045260246000fd5b906001600160a01b03809116801561375657600091848352602091600383526040928284862054166009825260ff6001868820015460b01c1615908161374c575b5080613744575b61372d57868552600381528284862054169487331515938461367d575b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7945087613645575b808352600484528683206001815401905581835260038452868320816001600160a01b0319825416179055877fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88519480a4878152a1831682036136175750505050565b516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b61366682600052600560205260406000206001600160a01b03198154169055565b8783526004845286832080546000190190556135b3565b919293809150906136ec575b15613697579087839261358a565b8488876136b4576024915190637e27328960e01b82526004820152fd5b90517f177e802f0000000000000000000000000000000000000000000000000000000081523360048201526024810191909152604490fd5b503386148015613711575b806136895750878252600583523384868420541614613689565b5085825260068352848220338352835260ff85832054166136f7565b602487855190630da9b01360e01b82526004820152fd5b50600161356d565b9050151538613566565b6024604051633250574960e11b815260006004820152fd5b359064ffffffffff8216820361063f57565b67ffffffffffffffff8111611a825760051b60200190565b919082604091031261063f576040516137b081613464565b60206137c98183956137c1816134be565b85520161376e565b910152565b919082604091031261063f576040516137e681613464565b60208082946137f481613324565b84520135910152565b919081101561380d5760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160801b038116810361063f5790565b90815461384381613780565b926040936138546040519182613480565b82815280946020809201926000526020600020906000935b85851061387b57505050505050565b6001848192845161388b81613464565b64ffffffffff87546001600160801b038116835260801c168382015281520193019401939161386c565b906040516138c281613448565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b356001600160a01b038116810361063f5790565b35801515810361063f5790565b9190613917828285613525565b803b613924575b50505050565b6139806001600160a01b03809216946040519384937f150b7a02000000000000000000000000000000000000000000000000000000009687865233600487015216602485015260448401526080606484015260848301906132d3565b03906020816000938185885af190829082613a16575b50506139cd57826139a5614516565b80519190826139c65760248260405190633250574960e11b82526004820152fd5b9050602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016036139fe57503880808061391e565b60249060405190633250574960e11b82526004820152fd5b909192506020813d602011613a6f575b81613a3360209383613480565b81010312610ae65751907fffffffff00000000000000000000000000000000000000000000000000000000821682036106445750903880613996565b3d9150613a26565b8060005260036020526001600160a01b036040600020541690811561293a575090565b80511561380d5760200190565b805182101561380d5760209160051b010190565b64ffffffffff80421691600090808252602091600a602052613adf60408220613837565b9185856020613aed86613a9a565b5101511611613bc45781526009602052604081208585825460c81c161115613bae57506001600160801b039485613b2384613a9a565b5151169583519260019360011015613b9a5750949392919084602060408501510151169581866001985b161115613b5e575050505050505090565b909181879881613b728798999a8598613aa7565b5151160116970191868087613b878689613aa7565b5101511697829392919796959498613b4d565b80634e487b7160e01b602492526032600452fd5b600201546001600160801b031695945050505050565b50935050505090565b806000526009602052604060002060ff600182015460a01c16600014613bf4575050600490565b805460f81c613c4d575460a01c64ffffffffff164210613c4757613c1781613abb565b9060005260096020526001600160801b038060026040600020015416911610600014613c4257600190565b600290565b50600090565b5050600390565b916000828152602090600382526001600160a01b036040958187842054166009855260ff6001898620015460b01c16159081613d8f575b5080613d84575b613d6d579480967ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79596828552600386527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84838720541694859283613d35575b169283613d1f575b84875260038852808720846001600160a01b0319825416179055519580a4948152a1565b8387526004885280872060018154019055613cfb565b613d5686600052600560205260406000206001600160a01b03198154169055565b838852600489528488208054600019019055613cf3565b602486885190630da9b01360e01b82526004820152fd5b508181161515613c92565b9050151538613c8b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003613dcb57565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b90613e176001600160801b03604084015116602061010085015101519061458c565b6001600160801b0381511660e084015164ffffffffff60c08601511682156144835781518015614459577f00000000000000000000000000000000000000000000000000000000000000008111614428575064ffffffffff6020613e7a84613a9a565b510151168110156143d15750600090819082815184905b808210614340575050505064ffffffffff421664ffffffffff82168110156143005750506001600160801b03168082036142c9575050600754928360005260096020526040600020916001600160801b0381511660028401906fffffffffffffffffffffffffffffffff198254161790556001600160a01b036060830151166001840154750100000000000000000000000000000000000000000060808501511515918654937fffffffffffffffffff0000ff000000000000000000000000000000000000000076ff0000000000000000000000000000000000000000000060a0890151151560b01b16921617171760018601556001600160a01b0384511678ffffffffff000000000000000000000000000000000000000060c086015160a01b169060e0860151937fff000000000000000000000000000000000000000000000000000000000000007eff0000000000000000000000000000000000000000000000000000000000007dffffffffff00000000000000000000000000000000000000000000000000602061402d8951996000198b0190613aa7565b51015160c81b169560f01b16911617171717845560005b818110614224575050600185016007556001600160a01b0360208301511680156137565761407a866001600160a01b0392613c54565b166141f3576140a56001600160a01b036060840151166001600160801b038351169030903390614665565b6001600160801b03602082015116806141c3575b507ffeb1cb9ce021c8bd5fb1eb836e6284c68866fa32d1d844238de19955238f807660206001600160a01b03845116926001600160a01b038286015116946001600160a01b03606082015116966141b861419960808401511515928c60a086015115156001600160a01b0361010060e089015194549864ffffffffff6040519a6141428c613464565b818160a01c168c5260c81c168c8b015201515116956001600160801b036040519a8b9a610140958c5233828d01528281511660408d015201511660608a0152608089015260a08801528060c088015286019061339e565b9260e08501906020908164ffffffffff91828151168552015116910152565b6101208301520390a4565b6141ed906001600160a01b036060850151166001600160a01b036101008601515116903390614665565b386140b9565b60246040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152fd5b86600052600a6020526040600020906142418160e0870151613aa7565b51825468010000000000000000811015611a82576001810180855581101561380d57600193600052602060002001906001600160801b038151167fffffffffffffffffffffff00000000000000000000000000000000000000000074ffffffffff000000000000000000000000000000006020855494015160801b1692161717905501614044565b60449250604051917f6375ff1300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b9193509193614364906001600160801b0361435b8588613aa7565b51511690614571565b9364ffffffffff8060206143788685613aa7565b5101511694168085111561439457506001849301909291613e91565b8385606492604051927fd97494c6000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b64ffffffffff60206143e284613a9a565b5101516040517ff1fb2cc500000000000000000000000000000000000000000000000000000000815264ffffffffff938416600482015291169091166024820152604490fd5b602490604051907f73627f740000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f7ea4ccdf000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b60009080825260036020526001600160a01b0380604084205416928333149384156144f2575b505082156144e057505090565b9091506144ed33926134d2565b161490565b60ff92945090604091815260066020528181203382526020522054169138806144d3565b3d15614541573d90614527826134a2565b916145356040519384613480565b82523d6000602084013e565b606090565b61456e9061455381614730565b90600052600960205260026040600020015460801c906134f6565b90565b9190916001600160801b038080941691160191821161350f57565b9190916040519061459c82613464565b600091828152826020820152936001600160801b03928383169182156146465767016345785d8a000080821161460f57506145d8859184614847565b16602087019281845211156145fb575090826145f6925116906134f6565b168252565b80634e487b7160e01b602492526001600452fd5b60449250604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b509394505050506040519061465a82613464565b808252602082015290565b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff841117611a82576146d4926040526147ab565b565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039290921660248301526044808301939093529181526146d49161472b606483613480565b6147ab565b80600052600960205261474960026040600020016138b5565b816000526009602052604060002060ff600182015460a01c1660001461477c57506001600160801b039150602001511690565b5460f81c61478e575061456e90613abb565b61456e91506001600160801b0360408183511692015116906134f6565b6001600160a01b0316906147d6600080836020829551910182875af16147cf614516565b90846148f6565b90815191821515928361481f575b5050506147ee5750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b819293509060209181010312610ae657602001519081159182150361064457503880806147e4565b909190600019838209838202918280831092039180830392146148e557670de0b6b3a764000090818310156148ae57947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b90614935575080511561490b57805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580614980575b614946575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b1561493e56fea164736f6c6343000817000a"; + hex"60c034620003dc576001600160401b0390601f601f1962004dcf3881900383810183168501919086831186841017620002f557808692606094604052833981010312620003dc5782516001600160a01b038082169590929091869003620003dc5760209485810151938416809403620003dc57604001519362000081620003e1565b95601e87527f5361626c696572205632204c6f636b7570205472616e63686564204e4654000081880152620000b5620003e1565b9060118252705341422d56322d4c4f434b55502d54524160781b81830152306080528751858111620002f5576001988954908a82811c92168015620003d1575b84831014620002d45781868493116200037b575b50839086831160011462000317576000926200030b575b5050600019600383901b1c191690891b1788555b8151948511620002f557600254938885811c95168015620002ea575b82861014620002d457848487961162000277575b50819385116001146200020d57505060009262000201575b5050600019600383901b1c191690841b176002555b60018060a01b03198481600054161760005560085416176008556040519260007fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a360a0526007556149cd908162000402823960805181613dda015260a051818181612eb80152613e7a0152f35b0151905038806200017c565b88959392919316600260005283600020936000905b8282106200025d575050841162000243575b505050811b0160025562000191565b015160001960f88460031b161c1916905538808062000234565b8484015186558a9790950194938401939081019062000222565b9091929394506002600052826000208580880160051c820192858910620002ca575b9188978c9297969594930160051c01915b828110620002ba57505062000164565b600081558897508b9101620002aa565b9250819262000299565b634e487b7160e01b600052602260045260246000fd5b94607f169462000150565b634e487b7160e01b600052604160045260246000fd5b01519050388062000120565b90878c94169184600052856000209260005b878282106200036457505084116200034a575b505050811b01885562000134565b015160001960f88460031b161c191690553880806200033c565b8385015186558f9790950194938401930162000329565b9091508a600052836000208680850160051c820192868610620003c7575b918d91869594930160051c01915b828110620003b757505062000109565b600081558594508d9101620003a7565b9250819262000399565b91607f1691620000f5565b600080fd5b60408051919082016001600160401b03811183821017620002f55760405256fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a71461321657508063027b6744146131f357806306fdde031461312e578063081812fc1461310f578063095ea7b3146130165780631400ecec14612f765780631c1cdd4c14612f115780631e99d56914612ef357806323b872dd14612edb5780632fe4304114612ea057806332fbe22b14612d4857806340e58ee514612aaa578063425d30dd14612a5957806342842e0e14612a1f57806342966c6814612844578063442675701461281d5780634857501f146127a75780634869e12d1461276c5780634cc55e11146122f05780636352211e146122c05780636d0cee75146122c057806370a082311461225057806375829def146121bd5780637cad6cd1146120c35780637de6b1db14611e9c5780637f5799f914611e415780638659c27014611ae7578063894e9a0d1461175b578063897f362b146114ab5780638f69b9931461140f5780639067b677146113bf57806395d89b41146112b0578063a22cb465146111f3578063a80fc071146111a1578063ad35efd41461113f578063b2564569146110ee578063b88d4fde14611061578063b8a3be661461102c578063b971302a14610fdd578063bc2be1be14610f8d578063c156a11d14610af6578063c87b56dd146109da578063cc364f4814610942578063d4dbd20b146108f0578063d511609f146108a4578063d975dfed14610858578063e985e9c514610803578063ea5ead1914610721578063eac8f5b8146106cf578063f590c1761461066d578063f851a440146106475763fdd46d601461025d57600080fd5b34610644576060366003190112610644576004359061027a613345565b91604435926001600160801b038085169182860361063f5761029a613dd0565b83855260099560209387855260ff600160408920015460a81c16156106285785875287855260ff600160408920015460a01c16610610576001600160a01b039081841680156105e65781156105ce57878952600387528260408a2054169283821415806105be575b61059a5761030f8961457d565b8781168411610568575097899a888b999a83809d5282825260408b209988828c54169b6002015460801c90610343916145a8565b858d5284845260408d20600201908282549160801b6fffffffffffffffffffffffffffffffff19169116178155610379906138ec565b908084830151169181808251169160400151166103959161352d565b161115927f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d93610539575b848c528252600160408c20015416946103da818a8861470d565b604051908152a4803314158061052f575b6104c1575b8333141590816104b6575b816104ab575b50610435575b837ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78688604051908152a180f35b823b156104a757604051636fd110e960e01b8152600481018790523360248201526001600160a01b039290921660448301526001600160801b031660648201529082908290608490829084905af161048f575b8080610407565b6104989061344e565b6104a3578238610488565b8280fd5b8380fd5b905083141538610401565b843b151591506103fb565b803b1561052b57604051636fd110e960e01b8152600481018890523360248201526001600160a01b03841660448201526001600160801b03831660648201528590818160848183875af1610517575b50506103f0565b6105209061344e565b61052b578438610510565b8480fd5b50803b15156103eb565b848c5280835260408c2060018101600160a01b60ff60a01b1982541617905560ff60f01b1981541690556103c0565b60405163287ecaef60e21b8152600481018b90526001600160801b038781166024830152919091166044820152606490fd5b606489836040519163b34359d360e01b835260048301523360248301526044820152fd5b506105c8896144e4565b15610302565b6024886040519063d2aabcd960e01b82526004820152fd5b60046040517fc61a0e9e000000000000000000000000000000000000000000000000000000008152fd5b60248660405190634a5541ef60e01b82526004820152fd5b6024866040519062b8e7e760e51b82526004820152fd5b600080fd5b80fd5b50346106445780600319360112610644576001600160a01b036020915416604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857816040916020935260098352205460f81c6040519015158152f35b6024906040519062b8e7e760e51b82526004820152fd5b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760016040836001600160a01b0393602095526009855220015416604051908152f35b5034610644576040366003190112610644576004359061073f613345565b916107498161457d565b92610752613dd0565b81835260099360209185835260ff600160408720015460a81c16156107ec5783855285835260ff600160408720015460a01c166107d4576001600160a01b03918282169283156105e6576001600160801b03938483169081156105ce57878952600387528260408a2054169283821415806105be5761059a5761030f8961457d565b60248460405190634a5541ef60e01b82526004820152fd5b6024846040519062b8e7e760e51b82526004820152fd5b50346106445760403660031901126106445761081d61332f565b6040610827613345565b926001600160a01b0380931681526006602052209116600052602052602060ff604060002054166040519015158152f35b50346106445760203660031901126106445760ff6001604060043593848152600960205220015460a81c16156106b85761089360209161457d565b6001600160801b0360405191168152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857604082600292602094526009845220015460801c604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760036040836001600160801b0393602095526009855220015416604051908152f35b503461064457602036600319011261064457600435600060206040516109678161349b565b8281520152808252600960205260ff600160408420015460a81c16156106b857604082819281526009602052205464ffffffffff8251916109a78361349b565b818160a01c16835260c81c1660208201526109d8825180926020908164ffffffffff91828151168552015116910152565bf35b503461064457602080600319360112610ae6576004356109f981613aae565b50826001600160a01b0360085416916044604051809481937fe9dc637500000000000000000000000000000000000000000000000000000000835230600484015260248301525afa928315610aea578093610a69575b5050610a6560405192828493845283019061330a565b0390f35b909192503d8082843e610a7c81846134b7565b8201918381840312610ae65780519067ffffffffffffffff82116104a3570182601f82011215610ae657805191610ab2836134d9565b93610ac060405195866134b7565b838552858484010111610644575090610ade918480850191016132e7565b903880610a4f565b5080fd5b604051903d90823e3d90fd5b503461064457604036600319011261064457600435610b13613345565b610b1b613dd0565b81835260099060209082825260ff600160408720015460a81c16156107ec57838552600382526001600160a01b03918260408720541693843303610f6e57610b628661457d565b906001600160801b039081831680158015610c02575b50505050505081811615610bea5783610b9091613c8b565b90811680610bb05760248460405190637e27328960e01b82526004820152fd5b8203610bba578380f35b6040516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b60248560405190633250574960e11b82526004820152fd5b610c0a613dd0565b898b5282865260ff600160408d20015460a81c1615610f5757898b5282865260ff600160408d20015460a01c16610f3f5788156105e657610f2757888a52600385528660408b205416918289141580610f17575b610ef357610c6b8a61457d565b8481168311610ec15750908a949392918a86528087526040862093610cd0610c9e8760028d89541698015460801c6145a8565b8d8952838a52600260408a200190836fffffffffffffffffffffffffffffffff1983549260801b1691161781556138ec565b90610cec818a840151169282604081835116920151169061352d565b161115610e92575b8a86528652888a7f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d888b600160408b2001541694610d3381868861470d565b604051908152a48033141580610e88575b610e1e575b813314159081610e13575b81610e08575b50610d97575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790604051868152a1388080808080610b78565b803b156104a357604051636fd110e960e01b8152600481018990523360248201526001600160a01b03881660448201526001600160801b0392909216606483015282908290608490829084905af1610df0575b80610d60565b610df99061344e565b610e04578538610dea565b8580fd5b905081141538610d5a565b823b15159150610d54565b803b156104a757604051636fd110e960e01b8152600481018a90523360248201526001600160a01b03891660448201526001600160801b03841660648201528490818160848183875af1610e74575b5050610d49565b610e7d9061344e565b6104a7578338610e6d565b50803b1515610d44565b8a86528087526040862060018101600160a01b60ff60a01b1982541617905560ff60f01b198154169055610cf4565b60405163287ecaef60e21b8152600481018c90526001600160801b038781166024830152919091166044820152606490fd5b60648a8a6040519163b34359d360e01b835260048301523360248301526044820152fd5b50610f218a6144e4565b15610c5e565b6024896040519063d2aabcd960e01b82526004820152fd5b60248a60405190634a5541ef60e01b82526004820152fd5b60248a6040519062b8e7e760e51b82526004820152fd5b60405163216caf0d60e01b815260048101879052336024820152604490fd5b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760408264ffffffffff926020945260098452205460a01c16604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b8576040826001600160a01b03926020945260098452205416604051908152f35b50346106445760203660031901126106445760ff6001604060209360043581526009855220015460a81c166040519015158152f35b50346106445760803660031901126106445761107b61332f565b611083613345565b906064359067ffffffffffffffff82116104a757366023830112156104a757816004013592846110b2856134d9565b936110c060405195866134b7565b8585523660248783010111610ae657856110eb96602460209301838801378501015260443591613941565b80f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857600160408360ff93602095526009855220015460b01c166040519015158152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85761117890613c04565b60405190600581101561118d57602092508152f35b602483634e487b7160e01b81526021600452fd5b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760026040836001600160801b0393602095526009855220015416604051908152f35b50346106445760403660031901126106445761120d61332f565b6024359081151580920361063f576001600160a01b031690811561127f5733835260066020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b602482604051907f5b08ba180000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064457806003193601126106445760405190806002549160018360011c92600185169485156113b5575b60209586861081146113a15785885287949392918790821561137f575050600114611325575b5050611311925003836134b7565b610a6560405192828493845283019061330a565b90859250600282527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b85831061136757505061131193508201013880611303565b8054838901850152879450869390920191810161134f565b925093505061131194915060ff191682840152151560051b8201013880611303565b602483634e487b7160e01b81526022600452fd5b93607f16936112dd565b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85760408264ffffffffff926020945260098452205460c81c16604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b85761144890613c04565b9060058210159081611489576002831491821561149d575b8215611474575b6020836040519015158152f35b90915061148957506004602091143880611467565b80634e487b7160e01b602492526021600452fd5b506003831491506000611460565b5034610644576020906003198281360112610ae6576004359167ffffffffffffffff91828411610ae65761012084360391820112610ae6576114eb613dd0565b60c48401359060221901811215610ae65783016004810135928311610ae65760248101908360061b80360383136104a757602490611528866137b7565b9561153660405197886134b7565b8652878601920101913683116104a757905b868383106117435750505050815190611560826137b7565b9261156e60405194856134b7565b828452601f1961157d846137b7565b0186835b82811061171f5750505064ffffffffff804216936001600160801b0392836115a882613ad1565b51511683808b6115b785613ad1565b51015116880116604051916115cb8361349b565b82528a8201526115da88613ad1565b526115e487613ad1565b5060019260015b8381106116b657505050505061160385600401613920565b9161161060248701613920565b9161161d6044880161385a565b6064880135926001600160a01b039081851680950361064457509288959261166e9895926116a3989561165560846116ae9d01613934565b948161166360a48c01613934565b976040519d8e613431565b168c52168c8b0152166040890152606088015215156080870152151560a086015260c085015260e084015260e4369101613805565b610100820152613e2c565b604051908152f35b8089838d8180826116db8d6116cc8e9a8d613ade565b51511696600019890190613ade565b51015116916116ea868a613ade565b510151160116604051916116fd8361349b565b82528d82015261170d828c613ade565b52611718818b613ade565b50016115eb565b60405161172b8161349b565b60008152600083820152828289010152018790611581565b60409161175036856137cf565b815201910190611548565b503461064457602036600319011261064457606061016060405161177e81613462565b83815283602082015283604082015283838201528360808201528360a08201528360c08201528360e082015283610100820152836101208201526040516117c48161347f565b84815284602082015284604082015261014082015201526004358152600960205260ff600160408320015460a81c1615611acf5760043581526009602052604081209060405191610140830183811067ffffffffffffffff821117611ab9576118b59160029160405280546001600160a01b038116865264ffffffffff8160a01c16602087015264ffffffffff8160c81c16604087015260ff8160f01c161515606087015260f81c1515608086015260ff60018201546001600160a01b03811660a0880152818160a01c16151560c0880152818160a81c16151560e088015260b01c161515610100860152016138ec565b6101208301526118c6600435613c04565b6005811015611aa557610160926119719260026119ad9314611a9a575b610120820151906001600160a01b0360a0840151169064ffffffffff60408501511660608501511515928561010081015115159460c082015115159360e0830151151595600435815260036020526001600160a01b036040822054166080604064ffffffffff60206001600160a01b038951169801511693600a602052209b01511515946040519d8e613462565b8d5260208d015260408c015260608b015260808a015260a089015260c088015260e087015261010086015261012085015261014084015261386e565b82820152610a65604051928392602084526001600160a01b0381511660208501526001600160a01b03602082015116604085015264ffffffffff604082015116606085015264ffffffffff60608201511660808501526080810151151560a085015260a0810151151560c08501526001600160a01b0360c08201511660e085015260e081015115156101008501526101008101511515610120850152610120810151151561014085015261014081015160406001600160801b03918281511685880152826020820151166101808801520151166101a085015201516101c0808401526101e08301906133d5565b8060608301526118e3565b602482634e487b7160e01b81526021600452fd5b634e487b7160e01b600052604160045260246000fd5b602460405162b8e7e760e51b81526004356004820152fd5b503461064457602080600319360112610ae65760043567ffffffffffffffff81116104a357611b1a9036906004016133a4565b9190611b24613dd0565b83925b808410611b32578480f35b611b3d848284613834565b3593611b47613dd0565b848652600980855260ff90600190828260408b20015460a81c1615611e2a57878952808752604089208281015460a01c841615611b965760248960405190634a5541ef60e01b82526004820152fd5b9790919293949596975460f81c611e1257611bc78160005260096020526001600160a01b0360406000205416331490565b15611df257611bd581613af2565b818a52828952611bea600260408c20016138ec565b906001600160801b0395868351168783161015611dda57838c52848b5260408c205460f01c1615611dc25791818a611c3b85898f9a999896611c318c99838793511661352d565b950151169061352d565b8386528482527f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa5060408720916040835499600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c161785558b83169a8b15611da9575b60038096019c88169c8d6fffffffffffffffffffffffffffffffff198254161790556001600160a01b0392838092169b8c9789522054169889965260408d2001541694611cee8b858861470d565b604080518881526001600160801b0392831660208201529290911690820152606090a47ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78a604051838152a1813b611d52575b505050505050600101929190611b27565b813b15610e0457856084928195604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af1611d95575b80808080611d41565b611d9e9061344e565b61052b578438611d8c565b818601600160a01b60ff60a01b19825416179055611ca0565b602483604051906339c6dc7360e21b82526004820152fd5b602484604051906322cad1af60e11b82526004820152fd5b60405163216caf0d60e01b81526004810191909152336024820152604490fd5b6024906040519063fe19f19f60e01b82526004820152fd5b6024886040519062b8e7e760e51b82526004820152fd5b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857604082611e8892610a659452600a6020522061386e565b6040519182916020835260208301906133d5565b503461064457602080600319360112610ae65760043590611ebb613dd0565b8183526009815260ff600160408520015460a81c16156120ac57611ede82613c04565b60058110156120985760048103611f075760248360405190634a5541ef60e01b82526004820152fd5b60038103611f27576024836040519063fe19f19f60e01b82526004820152fd5b60021461208057611f4e8260005260096020526001600160a01b0360406000205416331490565b15612061578183526009815260ff604084205460f01c161561204957818352600981526040832060ff60f01b19815416905582604051837f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f8380a2600383526001600160a01b03604083205416803b611ff1575b5050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce791604051908152a180f35b803b156104a357816024818580947f450154640000000000000000000000000000000000000000000000000000000083528960048401525af1612035575b80611fc2565b61203e9061344e565b6104a357823861202f565b602482604051906339c6dc7360e21b82526004820152fd5b60405163216caf0d60e01b815260048101839052336024820152604490fd5b602482604051906322cad1af60e11b82526004820152fd5b602484634e487b7160e01b81526021600452fd5b6024826040519062b8e7e760e51b82526004820152fd5b5034610644576020366003190112610644576004356001600160a01b03908181168091036104a35781835416338103612194575060085491816001600160a01b03198416176008556040519216825260208201527fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc60403392a260075460001981019081116121805760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a180f35b602482634e487b7160e01b81526011600452fd5b6040516331b339a960e21b81526001600160a01b03919091166004820152336024820152604490fd5b5034610644576020366003190112610644576121d761332f565b9080546001600160a01b0380821693338503612229576001600160a01b03199394501691829116178255337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808380a380f35b6040516331b339a960e21b81526001600160a01b0386166004820152336024820152604490fd5b5034610644576020366003190112610644576001600160a01b0361227261332f565b16801561228f578160409160209352600483522054604051908152f35b602482604051907f89c62b640000000000000000000000000000000000000000000000000000000082526004820152fd5b50346106445760203660031901126106445760206122df600435613aae565b6001600160a01b0360405191168152f35b50346106445760403660031901126106445767ffffffffffffffff6004358181116104a3576123239036906004016133a4565b90916024359081116104a75761233d9036906004016133a4565b612345613dd0565b80830361273557845b838110612359578580f35b612364818587613834565b3590612371818688613834565b35875260036020526001600160a01b0360408820541661239a612395838688613834565b61385a565b906123a3613dd0565b838952600960205260ff600160408b20015460a81c16156107ec57838952600960205260ff600160408b20015460a01c166107d45780156105e6576001600160801b0382161561271d5783895260036020526001600160a01b0360408a20541691828214158061270d575b6126e95761241b8561457d565b6001600160801b0381166001600160801b038316116126b9575090899291858452600960205260408420926124a16001600160a01b03855416946002809101546001600160801b036fffffffffffffffffffffffffffffffff1961248387608094851c6145a8565b938c8b52600960205260408b2001938454931b1691161781556138ec565b6001600160801b036124c5816020840151169282604081835116920151169061352d565b161115612688575b86855260096020526001600160a01b036001604087200154166124fa6001600160801b038416858361470d565b83887f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d60206040516001600160801b0388168152a4803314158061267e575b612614575b833314159081612609575b816125fe575b5061258c575b505050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce76020600193604051908152a10161234e565b823b156104a757604051636fd110e960e01b8152600481018790523360248201526001600160a01b039290921660448301526001600160801b031660648201529082908290608490829084905af16125e6575b8080612555565b6125ef9061344e565b6125fa5786386125df565b8680fd5b90508314153861254f565b843b15159150612549565b803b1561052b57604051636fd110e960e01b8152600481018890523360248201526001600160a01b03841660448201526001600160801b03831660648201528590818160848183875af161266a575b505061253e565b6126739061344e565b61052b578438612663565b50803b1515612539565b86855260096020526040852060018101600160a01b60ff60a01b1982541617905560ff60f01b1981541690556124cd565b60405163287ecaef60e21b8152600481018790526001600160801b03928316602482015291166044820152606490fd5b606485836040519163b34359d360e01b835260048301523360248301526044820152fd5b50612717856144e4565b1561240e565b6024846040519063d2aabcd960e01b82526004820152fd5b82604491604051917faec9344000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50346106445760203660031901126106445760ff6001604060043593848152600960205220015460a81c16156106b857610893602091614767565b50346106445760203660031901126106445760043590818152600960205260ff600160408320015460a81c16156120ac57806127e283613c04565b926005841015611aa557600260209403612803575b50506040519015158152f35b815260098352604090205460f01c60ff16905038806127f7565b503461064457806003193601126106445760206001600160a01b0360085416604051908152f35b503461064457602080600319360112610ae65760043590612863613dd0565b8183526009815260ff600160408520015460a81c16156120ac578183526009815260ff600160408520015460a01c16156129ee576128a0826144e4565b156120615781600052600381526001600160a01b0380604060002054166009835260ff60016040600020015460b01c161590816129e4575b50806129dc575b6129c4577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790836000526003835260406000205416918215928315612989575b846000526003825260406000206001600160a01b03198154169055846000604051927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4848152a1612971575080f35b60249060405190637e27328960e01b82526004820152fd5b6129aa85600052600560205260406000206001600160a01b03198154169055565b80600052600482526040600020600019815401905561291f565b60248360405190630da9b01360e01b82526004820152fd5b5060006128df565b90501515386128d8565b602482604051907f817cd6390000000000000000000000000000000000000000000000000000000082526004820152fd5b503461064457612a2e3661336f565b60405191602083019383851067ffffffffffffffff861117611ab9576110eb94604052858452613941565b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857600160408360ff93602095526009855220015460a01c166040519015158152f35b503461064457602090816003193601126106445760043590612aca613dd0565b81815260099283815260ff600160408420015460a81c1615612d315782825283815260408220600181015460a01c60ff1615612b185760248460405190634a5541ef60e01b82526004820152fd5b9284935460f81c611e1257612b438160005260096020526001600160a01b0360406000205416331490565b15611df257612b5181613af2565b93818452808352612b67600260408620016138ec565b916001600160801b03938484511685881610156120805781865282815260ff604087205460f01c161561204957612bb5878683612bab8a9b838a9c9b9c511661352d565b970151169061352d565b908286528381526040862091825494600160f81b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87161784556003898316948515612d17575b01988716988981546fffffffffffffffffffffffffffffffff19161790556001600160a01b038096168097600385528760408b205416978893865260408b20600101541693612c4a8c848761470d565b604080518981526001600160801b03938416602082015292909116908201528060608101037f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa5091a4604051908382527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce791a1823b612cc6578480f35b823b1561052b576084928591604051978896879563c6f5ed0f60e01b875260048701526024860152604485015260648401525af1612d08575b81818080808480f35b612d119061344e565b81612cff565b60018101600160a01b60ff60a01b19825416179055612bfa565b6024836040519062b8e7e760e51b82526004820152fd5b5034610644576003199060203683018113610ae6576004359167ffffffffffffffff93848411610ae65761014090843603011261064457612d87613dd0565b60405193612d9485613431565b612da08460040161335b565b8552612dae6024850161335b565b6020860152612dbf604485016134f5565b604086015260648401356001600160a01b03811681036104a3576060860152612dea60848501613424565b6080860152612dfb60a48501613424565b60a0860152612e0c60c485016137a5565b60c086015260e4840135908111610ae65783019136602384011215610ae6576004830135612e39816137b7565b93612e4760405195866134b7565b8185526024602086019260061b820101933685116106445750602401905b838210612e875760206116ae886116a3898960e0840152610104369101613805565b82604091612e9536856137cf565b815201910190612e65565b503461064457806003193601126106445760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610644576110eb612eed3661336f565b9161355c565b50346106445780600319360112610644576020600754604051908152f35b503461064457602036600319011261064457600435808252600960205260ff600160408420015460a81c16156106b857612f4a90613c04565b9060058210156114895760208215838115612f6b575b506040519015158152f35b600191501482612f60565b50346106445760203660031901126106445760043590818152600960205260ff600160408320015460a81c16156120ac57602091604082828152600985522060ff815460f01c1680613004575b612fdb575b50506001600160801b0360405191168152f35b612ffd92506001600160801b036002612ff79201541691613af2565b9061352d565b3880612fc8565b5060ff600182015460a01c1615612fc3565b50346106445760403660031901126106445761303061332f565b60243561303c81613aae565b331515806130fc575b806130d2575b6130a25781906001600160a01b03809416938491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258680a48252600560205260408220906001600160a01b031982541617905580f35b60246040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152336004820152fd5b506001600160a01b038116845260066020526040842033855260205260ff6040852054161561304b565b50336001600160a01b0382161415613045565b50346106445760203660031901126106445760206122df600435613509565b50346106445780600319360112610644576040519080600191600154928360011c92600185169485156131e9575b60209586861081146113a15785885287949392918790821561137f57505060011461318f575050611311925003836134b7565b90859250600182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b8583106131d157505061131193508201013880611303565b805483890185015287945086939092019181016131b9565b93607f169361315c565b5034610644578060031936011261064457602060405167016345785d8a00008152f35b905034610ae6576020366003190112610ae6576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036104a357602092507f80ac58cd0000000000000000000000000000000000000000000000000000000081149081156132bd575b8115613293575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861328c565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150613285565b60005b8381106132fa5750506000910152565b81810151838201526020016132ea565b90602091613323815180928185528580860191016132e7565b601f01601f1916010190565b600435906001600160a01b038216820361063f57565b602435906001600160a01b038216820361063f57565b35906001600160a01b038216820361063f57565b606090600319011261063f576001600160a01b0390600435828116810361063f5791602435908116810361063f579060443590565b9181601f8401121561063f5782359167ffffffffffffffff831161063f576020808501948460051b01011161063f57565b90815180825260208080930193019160005b8281106133f5575050505090565b835180516001600160801b0316865282015164ffffffffff1685830152604090940193928101926001016133e7565b3590811515820361063f57565b610120810190811067ffffffffffffffff821117611ab957604052565b67ffffffffffffffff8111611ab957604052565b610180810190811067ffffffffffffffff821117611ab957604052565b6060810190811067ffffffffffffffff821117611ab957604052565b6040810190811067ffffffffffffffff821117611ab957604052565b90601f8019910116810190811067ffffffffffffffff821117611ab957604052565b67ffffffffffffffff8111611ab957601f01601f191660200190565b35906001600160801b038216820361063f57565b61351281613aae565b5060005260056020526001600160a01b036040600020541690565b6001600160801b03918216908216039190821161354657565b634e487b7160e01b600052601160045260246000fd5b906001600160a01b03809116801561378d57600091848352602091600383526040928284862054166009825260ff6001868820015460b01c16159081613783575b508061377b575b6137645786855260038152828486205416948733151593846136b4575b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce794508761367c575b808352600484528683206001815401905581835260038452868320816001600160a01b0319825416179055877fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88519480a4878152a18316820361364e5750505050565b516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b61369d82600052600560205260406000206001600160a01b03198154169055565b8783526004845286832080546000190190556135ea565b91929380915090613723575b156136ce57908783926135c1565b8488876136eb576024915190637e27328960e01b82526004820152fd5b90517f177e802f0000000000000000000000000000000000000000000000000000000081523360048201526024810191909152604490fd5b503386148015613748575b806136c057508782526005835233848684205416146136c0565b5085825260068352848220338352835260ff858320541661372e565b602487855190630da9b01360e01b82526004820152fd5b5060016135a4565b905015153861359d565b6024604051633250574960e11b815260006004820152fd5b359064ffffffffff8216820361063f57565b67ffffffffffffffff8111611ab95760051b60200190565b919082604091031261063f576040516137e78161349b565b60206138008183956137f8816134f5565b8552016137a5565b910152565b919082604091031261063f5760405161381d8161349b565b602080829461382b8161335b565b84520135910152565b91908110156138445760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160801b038116810361063f5790565b90815461387a816137b7565b9260409361388b60405191826134b7565b82815280946020809201926000526020600020906000935b8585106138b257505050505050565b600184819284516138c28161349b565b64ffffffffff87546001600160801b038116835260801c16838201528152019301940193916138a3565b906040516138f98161347f565b6040819360018154916001600160801b0392838116865260801c6020860152015416910152565b356001600160a01b038116810361063f5790565b35801515810361063f5790565b919061394e82828561355c565b803b61395b575b50505050565b6139b76001600160a01b03809216946040519384937f150b7a020000000000000000000000000000000000000000000000000000000096878652336004870152166024850152604484015260806064840152608483019061330a565b03906020816000938185885af190829082613a4d575b5050613a0457826139dc61454d565b80519190826139fd5760248260405190633250574960e11b82526004820152fd5b9050602001fd5b7fffffffff000000000000000000000000000000000000000000000000000000001603613a35575038808080613955565b60249060405190633250574960e11b82526004820152fd5b909192506020813d602011613aa6575b81613a6a602093836134b7565b81010312610ae65751907fffffffff000000000000000000000000000000000000000000000000000000008216820361064457509038806139cd565b3d9150613a5d565b8060005260036020526001600160a01b0360406000205416908115612971575090565b8051156138445760200190565b80518210156138445760209160051b010190565b64ffffffffff80421691600090808252602091600a602052613b166040822061386e565b9185856020613b2486613ad1565b5101511611613bfb5781526009602052604081208585825460c81c161115613be557506001600160801b039485613b5a84613ad1565b5151169583519260019360011015613bd15750949392919084602060408501510151169581866001985b161115613b95575050505050505090565b909181879881613ba98798999a8598613ade565b5151160116970191868087613bbe8689613ade565b5101511697829392919796959498613b84565b80634e487b7160e01b602492526032600452fd5b600201546001600160801b031695945050505050565b50935050505090565b806000526009602052604060002060ff600182015460a01c16600014613c2b575050600490565b805460f81c613c84575460a01c64ffffffffff164210613c7e57613c4e81613af2565b9060005260096020526001600160801b038060026040600020015416911610600014613c7957600190565b600290565b50600090565b5050600390565b916000828152602090600382526001600160a01b036040958187842054166009855260ff6001898620015460b01c16159081613dc6575b5080613dbb575b613da4579480967ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79596828552600386527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84838720541694859283613d6c575b169283613d56575b84875260038852808720846001600160a01b0319825416179055519580a4948152a1565b8387526004885280872060018154019055613d32565b613d8d86600052600560205260406000206001600160a01b03198154169055565b838852600489528488208054600019019055613d2a565b602486885190630da9b01360e01b82526004820152fd5b508181161515613cc9565b9050151538613cc2565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003613e0257565b60046040517fa1c0d6e5000000000000000000000000000000000000000000000000000000008152fd5b90613e4e6001600160801b0360408401511660206101008501510151906145c3565b6001600160801b0381511660e084015164ffffffffff60c08601511682156144ba5781518015614490577f0000000000000000000000000000000000000000000000000000000000000000811161445f575064ffffffffff6020613eb184613ad1565b510151168110156144085750600090819082815184905b808210614377575050505064ffffffffff421664ffffffffff82168110156143375750506001600160801b0316808203614300575050600754928360005260096020526040600020916001600160801b0381511660028401906fffffffffffffffffffffffffffffffff198254161790556001600160a01b036060830151166001840154750100000000000000000000000000000000000000000060808501511515918654937fffffffffffffffffff0000ff000000000000000000000000000000000000000076ff0000000000000000000000000000000000000000000060a0890151151560b01b16921617171760018601556001600160a01b0384511678ffffffffff000000000000000000000000000000000000000060c086015160a01b169060e0860151937fff000000000000000000000000000000000000000000000000000000000000007eff0000000000000000000000000000000000000000000000000000000000007dffffffffff0000000000000000000000000000000000000000000000000060206140648951996000198b0190613ade565b51015160c81b169560f01b16911617171717845560005b81811061425b575050600185016007556001600160a01b03602083015116801561378d576140b1866001600160a01b0392613c8b565b1661422a576140dc6001600160a01b036060840151166001600160801b03835116903090339061469c565b6001600160801b03602082015116806141fa575b507ffeb1cb9ce021c8bd5fb1eb836e6284c68866fa32d1d844238de19955238f807660206001600160a01b03845116926001600160a01b038286015116946001600160a01b03606082015116966141ef6141d060808401511515928c60a086015115156001600160a01b0361010060e089015194549864ffffffffff6040519a6141798c61349b565b818160a01c168c5260c81c168c8b015201515116956001600160801b036040519a8b9a610140958c5233828d01528281511660408d015201511660608a0152608089015260a08801528060c08801528601906133d5565b9260e08501906020908164ffffffffff91828151168552015116910152565b6101208301520390a4565b614224906001600160a01b036060850151166001600160a01b03610100860151511690339061469c565b386140f0565b60246040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152fd5b86600052600a6020526040600020906142788160e0870151613ade565b51825468010000000000000000811015611ab9576001810180855581101561384457600193600052602060002001906001600160801b038151167fffffffffffffffffffffff00000000000000000000000000000000000000000074ffffffffff000000000000000000000000000000006020855494015160801b169216171790550161407b565b60449250604051917f6375ff1300000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b6040517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff918216600482015291166024820152604490fd5b919350919361439b906001600160801b036143928588613ade565b515116906145a8565b9364ffffffffff8060206143af8685613ade565b510151169416808511156143cb57506001849301909291613ec8565b8385606492604051927fd97494c6000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b64ffffffffff602061441984613ad1565b5101516040517ff1fb2cc500000000000000000000000000000000000000000000000000000000815264ffffffffff938416600482015291169091166024820152604490fd5b602490604051907f73627f740000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f7ea4ccdf000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6095d3bc000000000000000000000000000000000000000000000000000000008152fd5b60009080825260036020526001600160a01b038060408420541692833314938415614529575b5050821561451757505090565b9091506145243392613509565b161490565b60ff929450906040918152600660205281812033825260205220541691388061450a565b3d15614578573d9061455e826134d9565b9161456c60405193846134b7565b82523d6000602084013e565b606090565b6145a59061458a81614767565b90600052600960205260026040600020015460801c9061352d565b90565b9190916001600160801b038080941691160191821161354657565b919091604051906145d38261349b565b600091828152826020820152936001600160801b039283831691821561467d5767016345785d8a0000808211614646575061460f85918461487e565b16602087019281845211156146325750908261462d9251169061352d565b168252565b80634e487b7160e01b602492526001600452fd5b60449250604051917f4fea5c1a00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50939450505050604051906146918261349b565b808252602082015290565b9290604051927f23b872dd0000000000000000000000000000000000000000000000000000000060208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff841117611ab95761470b926040526147e2565b565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0392909216602483015260448083019390935291815261470b916147626064836134b7565b6147e2565b80600052600960205261478060026040600020016138ec565b816000526009602052604060002060ff600182015460a01c166000146147b357506001600160801b039150602001511690565b5460f81c6147c557506145a590613af2565b6145a591506001600160801b03604081835116920151169061352d565b6001600160a01b03169061480d600080836020829551910182875af161480661454d565b908461492d565b908151918215159283614856575b5050506148255750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b819293509060209181010312610ae6576020015190811591821503610644575038808061481b565b9091906000198382098382029182808310920391808303921461491c57670de0b6b3a764000090818310156148e557947faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066994950990828211900360ee1b910360121c170290565b60449086604051917f5173648d00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b5050670de0b6b3a764000090049150565b9061496c575080511561494257805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b815115806149b7575b61497d575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b1561497556fea164736f6c6343000817000a"; bytes public constant BYTECODE_NFT_DESCRIPTOR = hex"6080806040523461001757615f2090816200001d8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63e9dc63751461002757600080fd5b346143a65760403660031901126143a6576001600160a01b0360043516600435036143a6576100566080614951565b60006080819052606060a081905260c082905260e0819052610120819052610140819052610160819052610180919091526101a0526004356001600160a01b03166101008190526100a690614a61565b61012052610100516040517feac8f5b80000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa9081156143b3576000916148c0575b506001600160a01b03610117911680608052614c30565b60a052610100516040517fa80fc0710000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa80156143b3576fffffffffffffffffffffffffffffffff916000916148a1575b501660c052610100516040517fad35efd40000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa80156143b357600090614864575b6101e59150614d7d565b61014052610100516040517f4869e12d0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa9081156143b357600091614835575b5060c0516fffffffffffffffffffffffffffffffff16801561481f576fffffffffffffffffffffffffffffffff61271081930216041661010060800152610287600435614e79565b6101206080015260405160208101904682526bffffffffffffffffffffffff1960043560601b1660408201526024356054820152605481526102c88161496e565b519020610405602963ffffffff6103156102ee8261016861ffff8860101c16061661570a565b91601e604660ff61030b8460146050848d60081c1606011661570a565b981606011661570a565b6040519485927f68736c28000000000000000000000000000000000000000000000000000000006020850152610355815180926020602488019101614909565b83017f2c000000000000000000000000000000000000000000000000000000000000006024820152610391825180936020602585019101614909565b7f252c000000000000000000000000000000000000000000000000000000000000602583830101526103cf8351809460206027868601019101614909565b01017f252900000000000000000000000000000000000000000000000000000000000060278201520360098101845201826149fa565b61043d6fffffffffffffffffffffffffffffffff6040608001511660ff6104366001600160a01b0360805116615091565b16906151fa565b6104516001600160a01b0360805116614a61565b60a051610100516040517fbc2be1be0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa80156143b357602491600091614800575b5060206001600160a01b03608080015116604051938480927f9067b677000000000000000000000000000000000000000000000000000000008252823560048301525afa80156143b357610513926000916147d1575b5064ffffffffff8091169116615545565b610120516101805190929161059d602161053a6064610533818706615a17565b950461570a565b6040519481610553879351809260208087019101614909565b82016105688251809360208085019101614909565b017f250000000000000000000000000000000000000000000000000000000000000060208201520360018101855201836149fa565b610100608001519260c060800151956101206080015197604051996105c18b614951565b8a5260208a015260408901526060880152608087015260a086015260c085015260e0840152610100830152610120820152604051806101c081011067ffffffffffffffff6101c083011117614402576101c0810160405260608152600060208201526000604082015260608082015260006080820152606060a0820152600060c0820152600060e08201526060610100820152600061012082015260006101408201526060610160820152600061018082015260006101a082015260a082015161069160c0840151845190615b23565b9061097861015c604051926106a5846149de565b600884527f50726f677265737300000000000000000000000000000000000000000000000060208501526106e86040516106de8161498a565b60008152866159eb565b156147c9576090945b6106fa8661570a565b916040519586938493661e339034b21e9160c91b6020860152610946835195869261072c846027840160208901614909565b6d11103334b6361e9111b33333111f60911b602785840101526c1e3932b1ba103bb4b23a341e9160991b603585840101526107738551809660206042888701019101614909565b7f22206865696768743d22313030222066696c6c2d6f7061636974793d222e3033828501860160428101919091527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e882015286519661087991889160f990910190602001614909565b661e17ba32bc3a1f60c91b8285018601870160f98101919091527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b61014082015287519761091491899161015190910190602001614909565b661e17ba32bc3a1f60c91b6101518888888887010101010152602061015888888885519c8d9701010101019101614909565b631e17b39f60e11b90860190910190910190910190910161015881019190915281900361013c810190915201826149fa565b6101008301526101208201526028610100830151604051906109998261498a565b60008252610c3f61015c604051926109b0846149de565b600684527f537461747573000000000000000000000000000000000000000000000000000060208501526109e384615e1f565b6109ec82615e9d565b808211156147c15750945b610a0287870161570a565b91604051958693661e339034b21e9160c91b60208601528151610a2c816027880160208601614909565b85016d11103334b6361e9111b33333111f60911b60278201526c1e3932b1ba103bb4b23a341e9160991b6035820152610a6f825180936020604285019101614909565b017f22206865696768743d22313030222066696c6c2d6f7061636974793d222e303360428201527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e8820152610b6b82518093602060f985019101614909565b01661e17ba32bc3a1f60c91b60f98201527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b610140820152610bfa82518093602061015185019101614909565b01661e17ba32bc3a1f60c91b610151820152610c2182518093602061015885019101614909565b01631e17b39f60e11b6101588201520361013c8101845201826149fa565b610160840152016101808201526028602083015160405190610c608261498a565b60008252610caa61015c60405192610c77846149de565b600684527f416d6f756e74000000000000000000000000000000000000000000000000000060208501526109e384615e1f565b8352016020820152610fe560808301516030604051610cc88161498a565b60008152610f6f61015c60405194610cdf866149de565b600886527f4475726174696f6e0000000000000000000000000000000000000000000000006020870152610d1286615e1f565b610d1b82615e9d565b808211156147b95750935b610d326028860161570a565b91604051978893661e339034b21e9160c91b60208601528151610d5c816027880160208601614909565b85016d11103334b6361e9111b33333111f60911b60278201526c1e3932b1ba103bb4b23a341e9160991b6035820152610d9f825180936020604285019101614909565b017f22206865696768743d22313030222066696c6c2d6f7061636974793d222e303360428201527f222072783d223135222072793d22313522207374726f6b653d2223666666222060628201527f7374726f6b652d6f7061636974793d222e3122207374726f6b652d77696474686082820152651e911a11179f60d11b60a28201527f3c7465787420783d2232302220793d2233342220666f6e742d66616d696c793d60a88201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f7370616365222060c8820152703337b73a16b9b4bd329e911919383c111f60791b60e8820152610e9b82518093602060f985019101614909565b01661e17ba32bc3a1f60c91b60f98201527f3c7465787420783d2232302220793d2237322220666f6e742d66616d696c793d6101008201527f2227436f7572696572204e6577272c417269616c2c6d6f6e6f73706163652220610120820152703337b73a16b9b4bd329e91191b383c111f60791b610140820152610f2a82518093602061015185019101614909565b01661e17ba32bc3a1f60c91b610151820152610f5182518093602061015885019101614909565b01631e17b39f60e11b6101588201520361013c8101865201846149fa565b8260a08601526028810160c0860152602085015190610120860151809161018088015192839185010101605881016080890152605719906103e8030160011c8061014089015201601081016101a088015201602081016040870152010160e0840152610100830151610160840151845191615190565b6060820152604051908161010081011067ffffffffffffffff6101008401111761440257610100820160405260c782527f3c726563742077696474683d223130302522206865696768743d22313030252260208301527f2066696c7465723d2275726c28234e6f69736529222f3e3c7265637420783d2260408301527f37302220793d223730222077696474683d2238363022206865696768743d223860608301527f3630222066696c6c3d2223666666222066696c6c2d6f7061636974793d222e3060808301527f33222072783d223435222072793d22343522207374726f6b653d22236666662260a08301527f207374726f6b652d6f7061636974793d222e3122207374726f6b652d7769647460c08301527f683d2234222f3e0000000000000000000000000000000000000000000000000060e08301528251916101008401519160608101519460405161113b816149a6565b603381527f3c636972636c652069643d22476c6f772220723d22353030222066696c6c3d2260208201527f75726c282352616469616c476c6f7729222f3e0000000000000000000000000060408201526040519661119888614951565b61011c88527f3c66696c7465722069643d224e6f697365223e3c6665466c6f6f6420783d223060208901527f2220793d2230222077696474683d223130302522206865696768743d2231303060408901527f252220666c6f6f642d636f6c6f723d2268736c283233302c3231252c3131252960608901527f2220666c6f6f642d6f7061636974793d22312220726573756c743d22666c6f6f60808901527f6446696c6c222f3e3c666554757262756c656e6365206261736546726571756560a08901527f6e63793d222e3422206e756d4f6374617665733d22332220726573756c743d2260c08901527f4e6f6973652220747970653d226672616374616c4e6f697365222f3e3c66654260e08901527f6c656e6420696e3d224e6f6973652220696e323d22666c6f6f6446696c6c22206101008901527f6d6f64653d22736f66742d6c69676874222f3e3c2f66696c7465723e0000000061012089015260405197886103a081011067ffffffffffffffff6103a08b011117614402576103a0890160405261037b89527f3c706174682069643d224c6f676f222066696c6c3d2223666666222066696c6c60208a01527f2d6f7061636974793d222e312220643d226d3133332e3535392c3132342e303360408a01527f34632d2e3031332c322e3431322d312e3035392c342e3834382d322e3932332c60608a01527f362e3430322d322e3535382c312e3831392d352e3136382c332e3433392d372e60808a01527f3838382c342e3939362d31342e34342c382e3236322d33312e3034372c31322e60a08a01527f3536352d34372e3637342c31322e3536392d382e3835382e3033362d31372e3860c08a01527f33382d312e3237322d32362e3332382d332e3636332d392e3830362d322e373660e08a01527f362d31392e3038372d372e3131332d32372e3536322d31322e3737382d31332e6101008a01527f3834322d382e3032352c392e3436382d32382e3630362c31362e3135332d33356101208a01527f2e323635683063322e3033352d312e3833382c342e3235322d332e3534362c366101408a01527f2e3436332d352e323234683063362e3432392d352e3635352c31362e3231382d6101608a01527f322e3833352c32302e3335382c342e31372c342e3134332c352e3035372c382e6101808a01527f3831362c392e3634392c31332e39322c31332e373334682e30333763352e37336101a08a01527f362c362e3436312c31352e3335372d322e3235332c392e33382d382e34382c306101c08a01527f2c302d332e3531352d332e3531352d332e3531352d332e3531352d31312e34396101e08a01527f2d31312e3437382d35322e3635362d35322e3636342d36342e3833372d36342e6102008a01527f3833376c2e3034392d2e303337632d312e3732352d312e3630362d322e3731396102208a01527f2d332e3834372d322e3735312d362e3230346830632d2e3034362d322e3337356102408a01527f2c312e3036322d342e3538322c322e3732362d362e32323968306c2e3138352d6102608a01527f2e3134386830632e3039392d2e3036322c2e3232322d2e3134382c2e33372d2e6102808a01527f323539683063322e30362d312e3336322c332e3935312d322e3632312c362e306102a08a01527f34342d332e3834324335372e3736332d332e3437332c39372e37362d322e33346102c08a01527f312c3132382e3633372c31382e3333326331362e3637312c392e3934362d32366102e08a01527f2e3334342c35342e3831332d33382e3635312c34302e3139392d362e3239392d6103008a01527f362e3039362d31382e3036332d31372e3734332d31392e3636382d31382e38316103208a01527f312d362e3031362d342e3034372d31332e3036312c342e3737362d372e3735326103408a01527f2c392e3735316c36382e3235342c36382e33373163312e3732342c312e3630316103608a01527f2c322e3731342c332e38342c322e3733382c362e3139325a222f3e00000000006103808a0152604051978860a081011067ffffffffffffffff60a08b01111761440257611c76611cd79160a08b0160405260758b527f3c706174682069643d22466c6f6174696e6754657874222066696c6c3d226e6f60208c01527f6e652220643d224d31323520343568373530733830203020383020383076373560408c01527f307330203830202d3830203830682d373530732d38302030202d3830202d383060608c01527f762d3735307330202d3830203830202d3830222f3e000000000000000000000060808c015261182d615aea565b906040517f3c72616469616c4772616469656e742069643d2252616469616c476c6f77223e6020820152611cd260d87f3c73746f70206f66667365743d223025222073746f702d636f6c6f723d22000093846040850152805161195f60b886602085019361189f81605e840187614909565b8101997f222073746f702d6f7061636974793d222e36222f3e0000000000000000000000605e8c01527f3c73746f70206f66667365743d2231303025222073746f702d636f6c6f723d229a8b6073820152611904825180936020609385019101614909565b017f222073746f702d6f7061636974793d2230222f3e00000000000000000000000060938201527f3c2f72616469616c4772616469656e743e00000000000000000000000000000060a78201520360988101885201866149fa565b611967615aea565b90604051967f3c6c696e6561724772616469656e742069643d2253616e64546f70222078313d60208901527f223025222079313d223025223e000000000000000000000000000000000000006040890152604d88015282516119cd81606b8a0184614909565b8701917f222f3e00000000000000000000000000000000000000000000000000000000009283606b82015289606e820152611a12825180936020608e85019101614909565b019082608e830152611a5660a2897f3c2f6c696e6561724772616469656e743e0000000000000000000000000000009485609182015203608281018b5201896149fa565b611b9c610108611a64615aea565b6040519b8c917f3c6c696e6561724772616469656e742069643d2253616e64426f74746f6d222060208401527f78313d2231303025222079313d2231303025223e00000000000000000000000060408401527f3c73746f70206f66667365743d22313025222073746f702d636f6c6f723d22006054840152611af0815180926020607387019101614909565b8201908760738301526076820152875190611b0f826096830188614909565b018660968201527f3c616e696d617465206174747269627574654e616d653d22783122206475723d60998201527f2236732220726570656174436f756e743d22696e646566696e6974652220766160b98201527f6c7565733d223330253b3630253b313230253b3630253b3330253b222f3e000060d98201528560f78201520360e881018c52018a6149fa565b611ba4615aea565b906040519a8b957f3c6c696e6561724772616469656e742069643d22486f7572676c61737353747260208801527f6f6b6522206772616469656e745472616e73666f726d3d22726f74617465283960408801527f302922206772616469656e74556e6974733d227573657253706163654f6e557360608801527f65223e000000000000000000000000000000000000000000000000000000000060808801527f3c73746f70206f66667365743d22353025222073746f702d636f6c6f723d2200608388015251809260a2880190614909565b84018360a28201527f3c73746f70206f66667365743d22383025222073746f702d636f6c6f723d220060a5820152611cb882518093602060c485019101614909565b019160c483015260c78201520360b88101875201856149fa565b615190565b92611ce9611ce3614d0b565b896159eb565b97881561479e575b50604051611cfe816149c2565b609081527f3c7061746820643d224d2035302c3336302061203330302c333030203020312c60208201527f31203630302c302061203330302c333030203020312c31202d3630302c30222060408201527f66696c6c3d2223666666222066696c6c2d6f7061636974793d222e303222207360608201527f74726f6b653d2275726c2823486f7572676c6173735374726f6b65292220737460808201527f726f6b652d77696474683d2234222f3e0000000000000000000000000000000060a082015260405193846102c081011067ffffffffffffffff6102c087011117614402576102c0850160405261029885527f3c7061746820643d226d3536362c3136312e323031762d35332e39323463302d60208601527f31392e3338322d32322e3531332d33372e3536332d36332e3339382d35312e3160408601527f39382d34302e3735362d31332e3539322d39342e3934362d32312e3037392d3160608601527f35322e3538372d32312e303739732d3131312e3833382c372e3438372d31353260808601527f2e3630322c32312e303739632d34302e3839332c31332e3633362d36332e343160a08601527f332c33312e3831362d36332e3431332c35312e3139387635332e39323463302c60c08601527f31372e3138312c31372e3730342c33332e3432372c35302e3232332c34362e3360e08601527f3934763238342e383039632d33322e3531392c31322e39362d35302e3232332c6101008601527f32392e3230362d35302e3232332c34362e3339347635332e39323463302c31396101208601527f2e3338322c32322e35322c33372e3536332c36332e3431332c35312e3139382c6101408601527f34302e3736332c31332e3539322c39342e3935342c32312e3037392c3135322e6101608601527f3630322c32312e303739733131312e3833312d372e3438372c3135322e3538376101808601527f2d32312e3037396334302e3838362d31332e3633362c36332e3339382d33312e6101a08601527f3831362c36332e3339382d35312e313938762d35332e39323463302d31372e316101c08601527f39362d31372e3730342d33332e3433352d35302e3232332d34362e34303156326101e08601527f30372e3630336333322e3531392d31322e3936372c35302e3232332d32392e326102008601527f30362c35302e3232332d34362e3430315a6d2d3334372e3436322c35372e37396102208601527f336c3133302e3935392c3133312e3032372d3133302e3935392c3133312e30316102408601527f33563231382e3939345a6d3236322e3932342e303232763236322e3031386c2d6102608601527f3133302e3933372d3133312e3030362c3133302e3933372d3133312e3031335a6102808601527f222066696c6c3d2223313631383232223e3c2f706174683e00000000000000006102a0860152896000146145795760405161212c8161498a565b60008152995b1561441857604051806101e081011067ffffffffffffffff6101e083011117614402576101e081016040526101b181527f3c7061746820643d226d3438312e34362c3438312e35347638312e3031632d3260208201527f2e33352e37372d342e38322c312e35312d372e33392c322e32332d33302e332c60408201527f382e35342d37342e36352c31332e39322d3132342e30362c31332e39322d353360608201527f2e362c302d3130312e32342d362e33332d3133312e34372d31362e3136762d3860808201527f316c34362e332d34362e3331683137302e33336c34362e32392c34362e33315a60a08201527f222066696c6c3d2275726c282353616e64426f74746f6d29222f3e3c7061746860c08201527f20643d226d3433352e31372c3433352e323363302c312e31372d2e34362c322e60e08201527f33322d312e33332c332e34342d372e31312c392e30382d34312e39332c31352e6101008201527f39382d38332e38312c31352e3938732d37362e372d362e392d38332e38322d316101208201527f352e3938632d2e38372d312e31322d312e33332d322e32372d312e33332d332e6101408201527f3434762d2e30346c382e33342d382e33352e30312d2e30316331332e37322d366101608201527f2e35312c34322e39352d31312e30322c37362e382d31312e30327336322e39376101808201527f2c342e34392c37362e37322c31316c382e34322c382e34325a222066696c6c3d6101a08201527f2275726c282353616e64546f7029222f3e0000000000000000000000000000006101c0820152995b60405196876107e081011067ffffffffffffffff6107e08a01111761440257613b3f9c612dfa6036602d9960819f97631e17b39f60e11b8d7f3c2f646566733e000000000000000000000000000000000000000000000000009a612ecb9f6107e0016040526107a782527f3c672066696c6c3d226e6f6e6522207374726f6b653d2275726c2823486f757260208301527f676c6173735374726f6b652922207374726f6b652d6c696e656361703d22726f60408301527f756e6422207374726f6b652d6d697465726c696d69743d22313022207374726f60608301527f6b652d77696474683d2234223e3c7061746820643d226d3536352e3634312c3160808301527f30372e323863302c392e3533372d352e35362c31382e3632392d31352e36373660a08301527f2c32362e393733682d2e303233632d392e3230342c372e3539362d32322e313960c08301527f342c31342e3536322d33382e3139372c32302e3539322d33392e3530342c313460e08301527f2e3933362d39372e3332352c32342e3335352d3136312e3733332c32342e33356101008301527f352d39302e34382c302d3136372e3934382d31382e3538322d3139392e3935336101208301527f2d34342e393438682d2e303233632d31302e3131352d382e3334342d31352e366101408301527f37362d31372e3433372d31352e3637362d32362e3937332c302d33392e3733356101608301527f2c39362e3535342d37312e3932312c3231352e3635322d37312e3932317332316101808301527f352e3632392c33322e3138352c3231352e3632392c37312e3932315a222f3e3c6101a08301527f7061746820643d226d3133342e33362c3136312e32303363302c33392e3733356101c08301527f2c39362e3535342c37312e3932312c3231352e3635322c37312e3932317332316101e08301527f352e3632392d33322e3138362c3231352e3632392d37312e393231222f3e3c6c6102008301527f696e652078313d223133342e3336222079313d223136312e323033222078323d6102208301527f223133342e3336222079323d223130372e3238222f3e3c6c696e652078313d226102408301527f3536352e3634222079313d223136312e323033222078323d223536352e3634226102608301527f2079323d223130372e3238222f3e3c6c696e652078313d223138342e353834226102808301527f2079313d223230362e383233222078323d223138342e353835222079323d22356102a08301527f33372e353739222f3e3c6c696e652078313d223231382e313831222079313d226102c08301527f3231382e313138222078323d223231382e313831222079323d223536322e35336102e08301527f37222f3e3c6c696e652078313d223438312e383138222079313d223231382e316103008301527f3432222078323d223438312e383139222079323d223536322e343238222f3e3c6103208301527f6c696e652078313d223531352e343135222079313d223230372e3335322220786103408301527f323d223531352e343136222079323d223533372e353739222f3e3c70617468206103608301527f643d226d3138342e35382c3533372e353863302c352e34352c342e32372c31306103808301527f2e36352c31322e30332c31352e3432682e303263352e35312c332e33392c31326103a08301527f2e37392c362e35352c32312e35352c392e34322c33302e32312c392e392c37386103c08301527f2e30322c31362e32382c3133312e38332c31362e32382c34392e34312c302c396103e08301527f332e37362d352e33382c3132342e30362d31332e39322c322e372d2e37362c356104008301527f2e32392d312e35342c372e37352d322e33352c382e37372d322e38372c31362e6104208301527f30352d362e30342c32312e35362d392e3433683063372e37362d342e37372c316104408301527f322e30342d392e39372c31322e30342d31352e3432222f3e3c7061746820643d6104608301527f226d3138342e3538322c3439322e363536632d33312e3335342c31322e3438356104808301527f2d35302e3232332c32382e35382d35302e3232332c34362e3134322c302c392e6104a08301527f3533362c352e3536342c31382e3632372c31352e3637372c32362e393639682e6104c08301527f30323263382e3530332c372e3030352c32302e3231332c31332e3436332c33346104e08301527f2e3532342c31392e3135392c392e3939392c332e3939312c32312e3236392c376105008301527f2e3630392c33332e3539372c31302e3738382c33362e34352c392e3430372c386105208301527f322e3138312c31352e3030322c3133312e3833352c31352e3030327339352e336105408301527f36332d352e3539352c3133312e3830372d31352e3030326331302e3834372d326105608301527f2e37392c32302e3836372d352e3932362c32392e3932342d392e3334392c312e6105808301527f3234342d2e3436372c322e3437332d2e3934322c332e3637332d312e3432342c6105a08301527f31342e3332362d352e3639362c32362e3033352d31322e3136312c33342e35326105c08301527f342d31392e313733682e3032326331302e3131342d382e3334322c31352e36376105e08301527f372d31372e3433332c31352e3637372d32362e3936392c302d31372e3536322d6106008301527f31382e3836392d33332e3636352d35302e3232332d34362e3135222f3e3c70616106208301527f746820643d226d3133342e33362c3539322e373263302c33392e3733352c39366106408301527f2e3535342c37312e3932312c3231352e3635322c37312e393231733231352e366106608301527f32392d33322e3138362c3231352e3632392d37312e393231222f3e3c6c696e656106808301527f2078313d223133342e3336222079313d223539322e3732222078323d223133346106a08301527f2e3336222079323d223533382e373937222f3e3c6c696e652078313d223536356106c08301527f2e3634222079313d223539322e3732222078323d223536352e3634222079323d6106e08301527f223533382e373937222f3e3c706f6c796c696e6520706f696e74733d223438316107008301527f2e383232203438312e393031203438312e373938203438312e383737203438316107208301527f2e373735203438312e383534203335302e303135203335302e303236203231386107408301527f2e313835203231382e313239222f3e3c706f6c796c696e6520706f696e74733d6107608301527f223231382e313835203438312e393031203231382e323331203438312e3835346107808301527f203335302e303135203335302e303236203438312e383232203231382e3135326107a08301527f222f3e3c2f673e000000000000000000000000000000000000000000000000006107c0830152604051998a957f3c672069643d22486f7572676c617373223e00000000000000000000000000006020880152603295612d968151809260208a8c019101614909565b8701612dab8251809360208a85019101614909565b01612dbf8251809360208985019101614909565b01612dd38251809360208885019101614909565b01612de78251809360208785019101614909565b01918201520360168101865201846149fa565b6040519e8f9788977f3c646566733e000000000000000000000000000000000000000000000000000060208a0152612e3f6026998260208c9451948593019101614909565b8901612e548251809360208c85019101614909565b01612e688251809360208b85019101614909565b01612e7c8251809360208a85019101614909565b01612e908251809360208985019101614909565b01612ea48251809360208885019101614909565b01612eb88251809360208785019101614909565b019182015203600d8101895201876149fa565b61375e604c60e0830151610120840151936134ba6130ed6060604084015193015196612ef78186615d63565b946130e861012b604051612f0a816149de565b600581527f2d3130302500000000000000000000000000000000000000000000000000000060208201526040519889917f3c74657874506174682073746172744f66667365743d220000000000000000006020840152612f74815180926020603787019101614909565b7f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666683820160378101919091527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e0000000000000000006101098201528251926130b891849161012090910190602001614909565b6a1e17ba32bc3a2830ba341f60a91b90830190910161012081019190915281900361010b810190915201876149fa565b615d63565b956132cc61012b604051613100816149de565b600281527f30250000000000000000000000000000000000000000000000000000000000006020820152604051998a917f3c74657874506174682073746172744f66667365743d22000000000000000000602084015261316a815180926020603787019101614909565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e0000000000000000006101098201526132a782518093602061012085019101614909565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b81018a5201886149fa565b6132d68184615dcb565b926134b561012b6040516132e9816149de565b600481527f2d3530250000000000000000000000000000000000000000000000000000000060208201526040519687917f3c74657874506174682073746172744f66667365743d220000000000000000006020840152613353815180926020603787019101614909565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e00000000000000000061010982015261349082518093602061012085019101614909565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b8101875201856149fa565b615dcb565b9061369961012b6040516134cd816149de565b600381527f353025000000000000000000000000000000000000000000000000000000000060208201526040519485917f3c74657874506174682073746172744f66667365743d220000000000000000006020840152613537815180926020603787019101614909565b82017f2220687265663d2223466c6f6174696e6754657874222066696c6c3d2223666660378201527f662220666f6e742d66616d696c793d2227436f7572696572204e6577272c417260578201527f69616c2c6d6f6e6f7370616365222066696c6c2d6f7061636974793d222e3822607782015271103337b73a16b9b4bd329e91191b383c111f60711b60978201527f3c616e696d6174652061646469746976653d2273756d2220617474726962757460a98201527f654e616d653d2273746172744f66667365742220626567696e3d22307322206460c98201527f75723d22353073222066726f6d3d2230252220726570656174436f756e743d2260e98201527f696e646566696e6974652220746f3d2231303025222f3e00000000000000000061010982015261367482518093602061012085019101614909565b016a1e17ba32bc3a2830ba341f60a91b6101208201520361010b8101855201836149fa565b6040519586937f3c7465787420746578742d72656e646572696e673d226f7074696d697a65537060208601527f656564223e00000000000000000000000000000000000000000000000000000060408601526136ff815180926020604589019101614909565b8401613715825180936020604585019101614909565b0161372a825180936020604585019101614909565b0161373f825180936020604585019101614909565b01661e17ba32bc3a1f60c91b604582015203602c8101845201826149fa565b613a3e61019a6101408401516101a08501519061379f61379961379361378d60e060408b01519a01519461570a565b9461570a565b9761570a565b9161570a565b956040519687937f3c75736520687265663d2223476c6f77222066696c6c2d6f7061636974793d2260208601527f2e39222f3e00000000000000000000000000000000000000000000000000000060408601527f3c75736520687265663d2223476c6f772220783d22313030302220793d22313060458601527f3030222066696c6c2d6f7061636974793d222e39222f3e00000000000000000060658601527f3c75736520687265663d22234c6f676f2220783d223137302220793d22313730607c8601527f22207472616e73666f726d3d227363616c65282e3629222f3e3c757365206872609c8601527f65663d2223486f7572676c6173732220783d223135302220793d22393022207460bc8601527f72616e73666f726d3d22726f746174652831302922207472616e73666f726d2d60dc8601527f6f726967696e3d2235303020353030222f3e000000000000000000000000000060fc8601527f3c75736520687265663d222350726f67726573732220783d220000000000000061010e8601526101279061393a815180926020858a019101614909565b8501937f2220793d22373930222f3e00000000000000000000000000000000000000000080948180948801527f3c75736520687265663d22235374617475732220783d22000000000000000000610132880152610149966139a48251809360208b85019101614909565b01958601527f3c75736520687265663d2223416d6f756e742220783d2200000000000000000061015486015261016b946139e78251809360208985019101614909565b01938401527f3c75736520687265663d22234475726174696f6e2220783d220000000000000061017684015261018f92613a2a8251809360208785019101614909565b01918201520361017a8101855201836149fa565b6040519586937f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060208601527f30302f737667222077696474683d223130303022206865696768743d2231303060408601527f30222076696577426f783d2230203020313030302031303030223e00000000006060860152613aca815180926020607b89019101614909565b8401613ae0825180936020607b85019101614909565b01613af5825180936020607b85019101614909565b01613b0a825180936020607b85019101614909565b017f3c2f7376673e0000000000000000000000000000000000000000000000000000607b8201520360618101845201826149fa565b6101605260a051610100516040517fb971302a0000000000000000000000000000000000000000000000000000000081526024803560048301529091602091839182906001600160a01b03165afa9081156143b3576000916143bf575b506089613bab613ccd92614a61565b9260c0608001516040519485927f5b7b2274726169745f74797065223a224173736574222c2276616c7565223a226020850152613bf2815180926020604088019101614909565b8301907f227d2c7b2274726169745f74797065223a2253656e646572222c2276616c756560408301527f223a22000000000000000000000000000000000000000000000000000000000091826060820152613c57825180936020606385019101614909565b01907f227d2c7b2274726169745f74797065223a22537461747573222c2276616c756560638301526083820152613c98825180936020608685019101614909565b017f227d5d000000000000000000000000000000000000000000000000000000000060868201520360698101845201826149fa565b6101a05160a051610120516080519193929091613cf2906001600160a01b0316614a61565b91613cfe60243561570a565b92602460206001600160a01b03608080015116604051928380927fb2564569000000000000000000000000000000000000000000000000000000008252823560048301525afa9081156143b357600091614369575b50936142dd9661406560e361426c966094966142769a9661417b9a6000146142e157604051613d81816149c2565b609b81527fe29aa0efb88f205741524e494e473a205472616e7366657272696e672074686560208201527f204e4654206d616b657320746865206e6577206f776e6572207468652072656360408201527f697069656e74206f66207468652073747265616d2e205468652066756e64732060608201527f617265206e6f74206175746f6d61746963616c6c792077697468647261776e2060808201527f666f72207468652070726576696f757320726563697069656e742e000000000060a0820152915b60405197889461400160208701997f54686973204e465420726570726573656e74732061207061796d656e742073748b527f7265616d20696e2061205361626c696572205632200000000000000000000000604089015282516020840190613eb18160558c0184614909565b8901947f20636f6e74726163742e20546865206f776e6572206f662074686973204e465460558701527f2063616e207769746864726177207468652073747265616d656420617373657460758701527f732c207768696368206172652064656e6f6d696e6174656420696e2000000000609587015282516020840196613f3b8260b183018a614909565b017f2e5c6e5c6e2d2053747265616d2049443a20000000000000000000000000000060b1820152613f7682518093602060c385019101614909565b01613faf7f5c6e2d2000000000000000000000000000000000000000000000000000000000958660c384015251809360c7840190614909565b01947f20416464726573733a2000000000000000000000000000000000000000000000958660c7820152613fed82518093602060d185019101614909565b019260d184015251809360d5840190614909565b019060d582015261401c82518093602060df85019101614909565b017f5c6e5c6e0000000000000000000000000000000000000000000000000000000060df8201526140568251809360208785019101614909565b010360c38101855201836149fa565b6101a051906141d661407860243561570a565b916140f7602d604051809560208201976a029b0b13634b2b9102b19160ad1b89526140ad815180926020602b87019101614909565b82017f2023000000000000000000000000000000000000000000000000000000000000602b8201526140e88251809360208785019101614909565b0103600d8101865201846149fa565b610160516141049061585b565b94604051998a977f7b2261747472696275746573223a00000000000000000000000000000000000060208a0152614145815180926020602e8d019101614909565b8801917f2c226465736372697074696f6e223a2200000000000000000000000000000000602e840152518093603e840190614909565b01917f222c2265787465726e616c5f75726c223a2268747470733a2f2f7361626c6965603e8401527f722e636f6d222c226e616d65223a220000000000000000000000000000000000605e840152518093606d840190614909565b017f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b6261606d8201527f736536342c000000000000000000000000000000000000000000000000000000608d820152614237825180936020609285019101614909565b017f227d00000000000000000000000000000000000000000000000000000000000060928201520360748101845201826149fa565b60e081905261585b565b6142c9603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000060208301526142b98151809260208686019101614909565b810103601d8101845201826149fa565b60405191829160208352602083019061492c565b0390f35b6040516142ed8161496e565b605b81527fe29d95494e464f3a2054686973204e4654206973206e6f6e2d7472616e73666560208201527f7261626c652e2049742063616e6e6f7420626520736f6c64206f72207472616e60408201527f7366657272656420746f20616e6f74686572206163636f756e742e0000000000606082015291613e45565b90506020959195813d6020116143ab575b81614387602093836149fa565b810103126143a657519384151585036143a657909490936142dd613d53565b600080fd5b3d915061437a565b6040513d6000823e3d90fd5b90506020813d6020116143fa575b816143da602093836149fa565b810103126143a657516001600160a01b03811681036143a6576089613b9c565b3d91506143cd565b634e487b7160e01b600052604160045260246000fd5b6040518061012081011067ffffffffffffffff6101208301111761440257610120810160405260f881527f3c7061746820643d226d3438312e34362c3530342e3130317635382e3434396360208201527f2d322e33352e37372d342e38322c312e35312d372e33392c322e32332d33302e60408201527f332c382e35342d37342e36352c31332e39322d3132342e30362c31332e39322d60608201527f35332e362c302d3130312e32342d362e33332d3133312e34372d31362e31367660808201527f2d35382e343339683236322e39325a222066696c6c3d2275726c282353616e6460a08201527f426f74746f6d29222f3e3c656c6c697073652063783d22333530222063793d2260c08201527f3530342e313031222072783d223133312e343632222072793d2232382e31303860e08201527f222066696c6c3d2275726c282353616e64546f7029222f3e00000000000000006101008201529961237f565b604051806101c081011067ffffffffffffffff6101c083011117614402576101c0810160405261019981527f3c706f6c79676f6e20706f696e74733d22333530203335302e3032362034313560208201527f2e3033203238342e39373820323835203238342e39373820333530203335302e60408201527f303236222066696c6c3d2275726c282353616e64426f74746f6d29222f3e3c7060608201527f61746820643d226d3431362e3334312c3238312e39373563302c2e3931342d2e60808201527f3335342c312e3830392d312e3033352c322e36382d352e3534322c372e30373660a08201527f2d33322e3636312c31322e34352d36352e32382c31322e34352d33322e36323460c08201527f2c302d35392e3733382d352e3337342d36352e32382d31322e34352d2e36383160e08201527f2d2e3837322d312e3033352d312e3736372d312e3033352d322e36382c302d2e6101008201527f3931342e3335342d312e3830382c312e3033352d322e3637362c352e3534322d6101208201527f372e3037362c33322e3635362d31322e34352c36352e32382d31322e34352c336101408201527f322e3631392c302c35392e3733382c352e3337342c36352e32382c31322e34356101608201527f2e3638312e3836372c312e3033352c312e3736322c312e3033352c322e3637366101808201527f5a222066696c6c3d2275726c282353616e64546f7029222f3e000000000000006101a082015299612132565b6147b29198506147ac614d44565b906159eb565b9638611cf1565b905093610d26565b9050946109f7565b60d0946106f1565b6147f3915060203d6020116147f9575b6147eb81836149fa565b810190614a44565b38610502565b503d6147e1565b614819915060203d6020116147f9576147eb81836149fa565b386104ac565b634e487b7160e01b600052601260045260246000fd5b614857915060203d60201161485d575b61484f81836149fa565b810190614a1c565b3861023f565b503d614845565b506020813d602011614899575b8161487e602093836149fa565b810103126143a6575160058110156143a6576101e5906101db565b3d9150614871565b6148ba915060203d60201161485d5761484f81836149fa565b38610181565b90506020813d602011614901575b816148db602093836149fa565b810103126143a657516001600160a01b03811681036143a6576001600160a01b03610100565b3d91506148ce565b60005b83811061491c5750506000910152565b818101518382015260200161490c565b9060209161494581518092818552858086019101614909565b601f01601f1916010190565b610140810190811067ffffffffffffffff82111761440257604052565b6080810190811067ffffffffffffffff82111761440257604052565b6020810190811067ffffffffffffffff82111761440257604052565b6060810190811067ffffffffffffffff82111761440257604052565b60c0810190811067ffffffffffffffff82111761440257604052565b6040810190811067ffffffffffffffff82111761440257604052565b90601f8019910116810190811067ffffffffffffffff82111761440257604052565b908160209103126143a657516fffffffffffffffffffffffffffffffff811681036143a65790565b908160209103126143a6575164ffffffffff811681036143a65790565b6001600160a01b03168060405191614a78836149a6565b602a8352602083016040368237835115614b6c5760309053825160019060011015614b6c57607860218501536029905b808211614af1575050614ab9575090565b604490604051907fe22e27eb000000000000000000000000000000000000000000000000000000008252600482015260146024820152fd5b9091600f81166010811015614b57577f3031323334353637383961626364656600000000000000000000000000000000901a614b2d84876159da565b5360041c918015614b42576000190190614aa8565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b634e487b7160e01b600052603260045260246000fd5b67ffffffffffffffff811161440257601f01601f191660200190565b3d15614bc9573d90614baf82614b82565b91614bbd60405193846149fa565b82523d6000602084013e565b606090565b6020818303126143a65780519067ffffffffffffffff82116143a6570181601f820112156143a6578051614c0181614b82565b92614c0f60405194856149fa565b818452602082840101116143a657614c2d9160208085019101614909565b90565b6000809160405160208101906395d89b4160e01b825260048152614c53816149de565b51915afa614c5f614b9e565b90158015614cff575b614cc55780602080614c7f93518301019101614bce565b601e815111600014614c2d5750604051614c98816149de565b600b81527f4c6f6e672053796d626f6c000000000000000000000000000000000000000000602082015290565b50604051614cd2816149de565b600581527f4552433230000000000000000000000000000000000000000000000000000000602082015290565b50604081511115614c68565b60405190614d18826149de565b600782527f536574746c6564000000000000000000000000000000000000000000000000006020830152565b60405190614d51826149de565b600882527f4465706c657465640000000000000000000000000000000000000000000000006020830152565b6005811015614e635760048103614d975750614c2d614d44565b60038103614dd95750604051614dac816149de565b600881527f43616e63656c6564000000000000000000000000000000000000000000000000602082015290565b60018103614e1b5750604051614dee816149de565b600981527f53747265616d696e670000000000000000000000000000000000000000000000602082015290565b600203614e2a57614c2d614d0b565b604051614e36816149de565b600781527f50656e64696e6700000000000000000000000000000000000000000000000000602082015290565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b031660408051916395d89b4160e01b8352600083600481845afa92831561508657600093615063575b50815192614eb6846149de565b60118452614eeb6020947f5341422d56322d4c4f434b55502d4c494e00000000000000000000000000000086820152826159eb565b15614f295750507f4c6f636b7570204c696e65617200000000000000000000000000000000000000905191614f1f836149de565b600d835282015290565b614f668351614f37816149de565b601181527f5341422d56322d4c4f434b55502d44594e00000000000000000000000000000086820152826159eb565b15614fa45750507f4c6f636b75702044796e616d6963000000000000000000000000000000000000905191614f9a836149de565b600e835282015290565b614fe18351614fb2816149de565b601181527f5341422d56322d4c4f434b55502d54524100000000000000000000000000000086820152826159eb565b1561501f5750507f4c6f636b7570205472616e636865640000000000000000000000000000000000905191615015836149de565b600f835282015290565b61505f9083519384937f814a8a2e00000000000000000000000000000000000000000000000000000000855260048501526024840152604483019061492c565b0390fd5b61507f91933d8091833e61507781836149fa565b810190614bce565b9138614ea9565b82513d6000823e3d90fd5b60405160208101907f313ce567000000000000000000000000000000000000000000000000000000008252600481526150c9816149de565b6000928392839251915afa6150dc614b9e565b9080615113575b1561510f5760208180518101031261510b57602001519060ff82168203615108575090565b80fd5b5080fd5b5090565b5060208151146150e3565b6040519061512b826149de565b600482527f2667743b000000000000000000000000000000000000000000000000000000006020830152565b60405190615164826149de565b600482527f266c743b000000000000000000000000000000000000000000000000000000006020830152565b906151f89294936040519586926020946151b281518092888089019101614909565b84016151c682518093888085019101614909565b016151d982518093878085019101614909565b016151ec82518093868085019101614909565b010380855201836149fa565b565b801561550a57600091806154e5575090505b600190808281101561527657505050615223615157565b614c2d602260405183615240829551809260208086019101614909565b81017f203100000000000000000000000000000000000000000000000000000000000060208201520360028101845201826149fa565b66038d7ea4c6800011156154885760409081519060a0820182811067ffffffffffffffff821117614402578084526152ad8161498a565b6000815282528251906152bf826149de565b8482526020917f4b00000000000000000000000000000000000000000000000000000000000000838201528284015283516152f9816149de565b8581527f4d0000000000000000000000000000000000000000000000000000000000000083820152848401528351615330816149de565b8581527f42000000000000000000000000000000000000000000000000000000000000008382015260608401528351615368816149de565b8581527f5400000000000000000000000000000000000000000000000000000000000000838201526080840152600091856000965b61545c575b508451946153af866149de565b600790600787527f2623383830353b0000000000000000000000000000000000000000000000000083880152519560005b828110615449575050505061542a615430917f2000000000000000000000000000000000000000000000000000000000000000602787015260088652615425866149de565b61570a565b91615a17565b916005851015614b6c57614c2d9460051b015192615190565b81810184015188820185015283016153e0565b9591926103e89081851061547f57508680916064600a870406950493019661539d565b939296506153a2565b505061549261511e565b614c2d6028604051836154af829551809260208086019101614909565b81017f203939392e39395400000000000000000000000000000000000000000000000060208201520360088101845201826149fa565b600a0a9182156154f657500461520c565b80634e487b7160e01b602492526012600452fd5b5050604051615518816149de565b600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b62015180910304806155ad575061555a615157565b614c2d602660405183615577829551809260208086019101614909565b81017f203120446179000000000000000000000000000000000000000000000000000060208201520360068101845201826149fa565b61270f811161567c576001810361563957614c2d60206156016040516155d2816149de565b600481527f2044617900000000000000000000000000000000000000000000000000000000838201529361570a565b60405193816156198693518092868087019101614909565b820161562d82518093868085019101614909565b010380845201826149fa565b614c2d602061560160405161564d816149de565b600581527f2044617973000000000000000000000000000000000000000000000000000000838201529361570a565b5061568561511e565b614c2d602a604051836156a2829551809260208086019101614909565b81017f2039393939204461797300000000000000000000000000000000000000000000602082015203600a8101845201826149fa565b906156e282614b82565b6156ef60405191826149fa565b8281528092615700601f1991614b82565b0190602036910137565b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008082101561584d575b506d04ee2d6d415b85acef81000000008083101561583e575b50662386f26fc100008083101561582f575b506305f5e10080831015615820575b5061271080831015615811575b506064821015615801575b600a809210156157f7575b6001908160216157a2600187016156d8565b95860101905b6157b4575b5050505090565b600019019083907f30313233343536373839616263646566000000000000000000000000000000008282061a8353049182156157f2579190826157a8565b6157ad565b9160010191615790565b9190606460029104910191615785565b6004919392049101913861577a565b6008919392049101913861576d565b6010919392049101913861575e565b6020919392049101913861574c565b604093508104915038615733565b8051156159c65760405161586e816149a6565b604081527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040820152815191600292600281018091116159b05760038091047f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681036159b05761590d906002959492951b6156d8565b936020850193839284518501935b84811061595d57505050505060039051068060011461594a5760021461593f575090565b603d90600019015390565b50603d9081600019820153600119015390565b8360049197929394959701918251600190603f9082828260121c16880101518453828282600c1c16880101518385015382828260061c16880101518885015316850101518682015301959392919061591b565b634e487b7160e01b600052601160045260246000fd5b506040516159d38161498a565b6000815290565b908151811015614b6c570160200190565b9081518151908181149384615a01575050505090565b60209293945082012092012014388080806157ad565b80615a2957506040516159d38161498a565b600a811015615a8e57615a3b9061570a565b614c2d602260405180937f2e300000000000000000000000000000000000000000000000000000000000006020830152615a7e8151809260208686019101614909565b81010360028101845201826149fa565b615a979061570a565b614c2d602160405180937f2e000000000000000000000000000000000000000000000000000000000000006020830152615ada8151809260208686019101614909565b81010360018101845201826149fa565b60405190615af7826149de565b601082527f68736c283233302c3231252c31312529000000000000000000000000000000006020830152565b8015615d5557615b31615aea565b906127109081039081116159b057614c2d91615b4f6101369261570a565b6040519485927f3c672066696c6c3d226e6f6e65223e000000000000000000000000000000000060208501527f3c636972636c652063783d22313636222063793d2235302220723d2232322220602f8501527f7374726f6b653d22000000000000000000000000000000000000000000000000604f850152615bdb815180926020605788019101614909565b83017f22207374726f6b652d77696474683d223130222f3e000000000000000000000060578201527f3c636972636c652063783d22313636222063793d2235302220706174684c656e606c8201527f6774683d2231303030302220723d22323222207374726f6b653d220000000000608c820152615c6382518093602060a785019101614909565b017f22207374726f6b652d6461736861727261793d22313030303022207374726f6b60a78201527f652d646173686f66667365743d2200000000000000000000000000000000000060c7820152615cc482518093602060d585019101614909565b017f22207374726f6b652d6c696e656361703d22726f756e6422207374726f6b652d60d58201527f77696474683d223522207472616e73666f726d3d22726f74617465282d39302960f58201527f22207472616e73666f726d2d6f726967696e3d22313636203530222f3e000000610115820152631e17b39f60e11b610132820152036101168101845201826149fa565b50506040516159d38161498a565b60306151f8919392936040519481615d85879351809260208087019101614909565b820164010714051160dd1b60208201526a029b0b13634b2b9102b19160ad1b6025820152615dbc8251809360208785019101614909565b010360108101855201836149fa565b60256151f8919392936040519481615ded879351809260208087019101614909565b820164010714051160dd1b6020820152615e108251809360208785019101614909565b010360058101855201836149fa565b60009080518015615e9557906000916000915b818310615e4457505050600d02900390565b909193603b60f81b7fff00000000000000000000000000000000000000000000000000000000000000615e7787856159da565b511614615e8d575b600d01936001019190615e32565b849350615e7f565b505050600090565b60009080518015615e9557906000916000915b818310615ec25750505060041b900390565b909193603b60f81b7fff00000000000000000000000000000000000000000000000000000000000000615ef587856159da565b511614615f0b575b601001936001019190615eb0565b849350615efd56fea164736f6c6343000817000a"; diff --git a/src/SablierV2LockupDynamic.sol b/src/SablierV2LockupDynamic.sol index dc42e60b1..d5e68d1a2 100644 --- a/src/SablierV2LockupDynamic.sol +++ b/src/SablierV2LockupDynamic.sol @@ -122,8 +122,9 @@ contract SablierV2LockupDynamic is isTransferable: lockupStream.isTransferable, isDepleted: lockupStream.isDepleted, isStream: lockupStream.isStream, - sender: lockupStream.sender, + recipient: _ownerOf(streamId), segments: _segments[streamId], + sender: lockupStream.sender, startTime: lockupStream.startTime, wasCanceled: lockupStream.wasCanceled }); diff --git a/src/SablierV2LockupLinear.sol b/src/SablierV2LockupLinear.sol index a88ac2b4d..8af9d3d97 100644 --- a/src/SablierV2LockupLinear.sol +++ b/src/SablierV2LockupLinear.sol @@ -112,6 +112,7 @@ contract SablierV2LockupLinear is isTransferable: lockupStream.isTransferable, isDepleted: lockupStream.isDepleted, isStream: lockupStream.isStream, + recipient: _ownerOf(streamId), sender: lockupStream.sender, startTime: lockupStream.startTime, wasCanceled: lockupStream.wasCanceled diff --git a/src/SablierV2LockupTranched.sol b/src/SablierV2LockupTranched.sol index f42e674d7..9d81641af 100644 --- a/src/SablierV2LockupTranched.sol +++ b/src/SablierV2LockupTranched.sol @@ -106,6 +106,7 @@ contract SablierV2LockupTranched is isTransferable: lockupStream.isTransferable, isDepleted: lockupStream.isDepleted, isStream: lockupStream.isStream, + recipient: _ownerOf(streamId), sender: lockupStream.sender, startTime: lockupStream.startTime, tranches: _tranches[streamId], diff --git a/src/types/DataTypes.sol b/src/types/DataTypes.sol index 860623037..f7082625f 100644 --- a/src/types/DataTypes.sol +++ b/src/types/DataTypes.sol @@ -179,9 +179,10 @@ library LockupDynamic { /// @notice Struct encapsulating all the data for a specific id, allowing anyone to retrieve all information within /// one call to the contract. - /// @dev It contains the same data as the `Lockup.Stream` struct, plus the segments. + /// @dev It contains the same data as the `Lockup.Stream` struct, plus the recipient and the segments. struct StreamLD { address sender; + address recipient; uint40 startTime; uint40 endTime; bool isCancelable; @@ -264,9 +265,10 @@ library LockupLinear { /// @notice Struct encapsulating all the data for a specific id, allowing anyone to retrieve all information within /// one call to the contract. - /// @dev It contains the same data as the `Lockup.Stream` struct, plus the cliff value. + /// @dev It contains the same data as the `Lockup.Stream` struct, plus the recipient and the cliff value. struct StreamLL { address sender; + address recipient; uint40 startTime; bool isCancelable; bool wasCanceled; @@ -342,9 +344,10 @@ library LockupTranched { /// @notice Struct encapsulating all the data for a specific id, allowing anyone to retrieve all information within /// one call to the contract. - /// @dev It contains the same data as the `Lockup.Stream` struct, plus the tranches. + /// @dev It contains the same data as the `Lockup.Stream` struct, plus the recipient and the tranches. struct StreamLT { address sender; + address recipient; uint40 startTime; uint40 endTime; bool isCancelable; diff --git a/test/fork/LockupDynamic.t.sol b/test/fork/LockupDynamic.t.sol index d831ad648..3cb8057e4 100644 --- a/test/fork/LockupDynamic.t.sol +++ b/test/fork/LockupDynamic.t.sol @@ -187,6 +187,7 @@ abstract contract LockupDynamic_Fork_Test is Fork_Test { assertEq(actualStream.isDepleted, false, "isDepleted"); assertEq(actualStream.isTransferable, true, "isTransferable"); assertEq(actualStream.isStream, true, "isStream"); + assertEq(actualStream.recipient, params.recipient, "recipient"); assertEq(actualStream.segments, params.segments, "segments"); assertEq(actualStream.sender, params.sender, "sender"); assertEq(actualStream.startTime, params.startTime, "startTime"); diff --git a/test/fork/LockupLinear.t.sol b/test/fork/LockupLinear.t.sol index 603227a76..4287339da 100644 --- a/test/fork/LockupLinear.t.sol +++ b/test/fork/LockupLinear.t.sol @@ -186,6 +186,7 @@ abstract contract LockupLinear_Fork_Test is Fork_Test { assertEq(actualStream.isDepleted, false, "isDepleted"); assertEq(actualStream.isTransferable, true, "isTransferable"); assertEq(actualStream.isStream, true, "isStream"); + assertEq(actualStream.recipient, params.recipient, "recipient"); assertEq(actualStream.sender, params.sender, "sender"); assertEq(actualStream.startTime, params.range.start, "startTime"); assertEq(actualStream.wasCanceled, false, "wasCanceled"); diff --git a/test/fork/LockupTranched.t.sol b/test/fork/LockupTranched.t.sol index 173b6e112..114cbefb0 100644 --- a/test/fork/LockupTranched.t.sol +++ b/test/fork/LockupTranched.t.sol @@ -189,6 +189,7 @@ abstract contract LockupTranched_Fork_Test is Fork_Test { assertEq(actualStream.isDepleted, false, "isDepleted"); assertEq(actualStream.isTransferable, true, "isTransferable"); assertEq(actualStream.isStream, true, "isStream"); + assertEq(actualStream.recipient, params.recipient, "recipient"); assertEq(actualStream.tranches, params.tranches, "tranches"); assertEq(actualStream.sender, params.sender, "sender"); assertEq(actualStream.startTime, params.startTime, "startTime"); diff --git a/test/integration/fuzz/lockup-dynamic/createWithDurations.t.sol b/test/integration/fuzz/lockup-dynamic/createWithDurations.t.sol index 460bd39aa..7cd7869d1 100644 --- a/test/integration/fuzz/lockup-dynamic/createWithDurations.t.sol +++ b/test/integration/fuzz/lockup-dynamic/createWithDurations.t.sol @@ -108,6 +108,7 @@ contract CreateWithDurations_LockupDynamic_Integration_Fuzz_Test is assertEq(actualStream.isTransferable, true, "isTransferable"); assertEq(actualStream.isDepleted, false, "isDepleted"); assertEq(actualStream.isStream, true, "isStream"); + assertEq(actualStream.recipient, users.recipient, "recipient"); assertEq(actualStream.segments, vars.segmentsWithTimestamps, "segments"); assertEq(actualStream.sender, users.sender, "sender"); assertEq(actualStream.startTime, range.start, "startTime"); diff --git a/test/integration/fuzz/lockup-dynamic/createWithTimestamps.t.sol b/test/integration/fuzz/lockup-dynamic/createWithTimestamps.t.sol index c1265443d..a5f279d39 100644 --- a/test/integration/fuzz/lockup-dynamic/createWithTimestamps.t.sol +++ b/test/integration/fuzz/lockup-dynamic/createWithTimestamps.t.sol @@ -269,6 +269,7 @@ contract CreateWithTimestamps_LockupDynamic_Integration_Fuzz_Test is assertEq(actualStream.isTransferable, true, "isTransferable"); assertEq(actualStream.isDepleted, false, "isStream"); assertEq(actualStream.isStream, true, "isStream"); + assertEq(actualStream.recipient, params.recipient, "recipient"); assertEq(actualStream.sender, params.sender, "sender"); assertEq(actualStream.segments, params.segments, "segments"); assertEq(actualStream.startTime, range.start, "startTime"); diff --git a/test/integration/fuzz/lockup-linear/createWithTimestamps.t.sol b/test/integration/fuzz/lockup-linear/createWithTimestamps.t.sol index 133b9e88a..bc53ce6fd 100644 --- a/test/integration/fuzz/lockup-linear/createWithTimestamps.t.sol +++ b/test/integration/fuzz/lockup-linear/createWithTimestamps.t.sol @@ -182,6 +182,7 @@ contract CreateWithTimestamps_LockupLinear_Integration_Fuzz_Test is assertEq(actualStream.isDepleted, false, "isStream"); assertEq(actualStream.isTransferable, true, "isTransferable"); assertEq(actualStream.isStream, true, "isStream"); + assertEq(actualStream.recipient, params.recipient, "recipient"); assertEq(actualStream.sender, params.sender, "sender"); assertEq(actualStream.startTime, params.range.start, "startTime"); assertEq(actualStream.wasCanceled, false, "wasCanceled"); diff --git a/test/integration/fuzz/lockup-tranched/createWithDurations.t.sol b/test/integration/fuzz/lockup-tranched/createWithDurations.t.sol index 1c95cbee3..6a1468668 100644 --- a/test/integration/fuzz/lockup-tranched/createWithDurations.t.sol +++ b/test/integration/fuzz/lockup-tranched/createWithDurations.t.sol @@ -108,6 +108,7 @@ contract CreateWithDurations_LockupTranched_Integration_Fuzz_Test is assertEq(actualStream.isTransferable, true, "isTransferable"); assertEq(actualStream.isDepleted, false, "isDepleted"); assertEq(actualStream.isStream, true, "isStream"); + assertEq(actualStream.recipient, params.recipient, "recipient"); assertEq(actualStream.tranches, vars.tranchesWithTimestamps, "tranches"); assertEq(actualStream.sender, users.sender, "sender"); assertEq(actualStream.startTime, range.start, "startTime"); diff --git a/test/integration/fuzz/lockup-tranched/createWithTimestamps.t.sol b/test/integration/fuzz/lockup-tranched/createWithTimestamps.t.sol index 3c673940f..4b25dd2e0 100644 --- a/test/integration/fuzz/lockup-tranched/createWithTimestamps.t.sol +++ b/test/integration/fuzz/lockup-tranched/createWithTimestamps.t.sol @@ -272,6 +272,7 @@ contract CreateWithTimestamps_LockupTranched_Integration_Fuzz_Test is assertEq(actualStream.isTransferable, true, "isTransferable"); assertEq(actualStream.isDepleted, false, "isStream"); assertEq(actualStream.isStream, true, "isStream"); + assertEq(actualStream.recipient, params.recipient, "recipient"); assertEq(actualStream.sender, params.sender, "sender"); assertEq(actualStream.tranches, params.tranches, "tranches"); assertEq(actualStream.startTime, range.start, "startTime"); diff --git a/test/utils/Assertions.sol b/test/utils/Assertions.sol index 5f2395315..74cf9d617 100644 --- a/test/utils/Assertions.sol +++ b/test/utils/Assertions.sol @@ -51,6 +51,7 @@ abstract contract Assertions is PRBTest, PRBMathAssertions { assertEq(a.isDepleted, b.isDepleted, "isDepleted"); assertEq(a.isTransferable, b.isTransferable, "isTransferable"); assertEq(a.isStream, b.isStream, "isStream"); + assertEq(a.recipient, b.recipient, "recipient"); assertEq(a.sender, b.sender, "sender"); assertEq(a.startTime, b.startTime, "startTime"); assertEq(a.wasCanceled, b.wasCanceled, "wasCanceled"); @@ -64,6 +65,7 @@ abstract contract Assertions is PRBTest, PRBMathAssertions { assertEq(a.isDepleted, b.isDepleted, "isDepleted"); assertEq(a.isTransferable, b.isTransferable, "isTransferable"); assertEq(a.isStream, b.isStream, "isStream"); + assertEq(a.recipient, b.recipient, "recipient"); assertEq(a.segments, b.segments, "segments"); assertEq(a.sender, b.sender, "sender"); assertEq(a.startTime, b.startTime, "startTime"); @@ -78,6 +80,7 @@ abstract contract Assertions is PRBTest, PRBMathAssertions { assertEq(a.isDepleted, b.isDepleted, "isDepleted"); assertEq(a.isTransferable, b.isTransferable, "isTransferable"); assertEq(a.isStream, b.isStream, "isStream"); + assertEq(a.recipient, b.recipient, "recipient"); assertEq(a.sender, b.sender, "sender"); assertEq(a.startTime, b.startTime, "startTime"); assertEq(a.tranches, b.tranches, "tranches"); diff --git a/test/utils/Defaults.sol b/test/utils/Defaults.sol index 10de17ebd..e755694e2 100644 --- a/test/utils/Defaults.sol +++ b/test/utils/Defaults.sol @@ -96,6 +96,7 @@ contract Defaults is Constants { isDepleted: false, isStream: true, isTransferable: true, + recipient: users.recipient, segments: segments(), sender: users.sender, startTime: START_TIME, @@ -117,6 +118,7 @@ contract Defaults is Constants { isTransferable: true, isDepleted: false, isStream: true, + recipient: users.recipient, sender: users.sender, startTime: START_TIME, wasCanceled: false @@ -136,6 +138,7 @@ contract Defaults is Constants { isDepleted: false, isStream: true, isTransferable: true, + recipient: users.recipient, sender: users.sender, startTime: START_TIME, tranches: tranches(),