0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61524380620000f46000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80636b1239191161012a578063b187bd26116100bd578063d45a76cf1161008c578063e6b5be9811610071578063e6b5be9814610648578063e97b80711461065b578063f9eaee0d1461066e57600080fd5b8063d45a76cf14610622578063db20de821461063557600080fd5b8063b187bd26146105c8578063c267621e146105e5578063d09edf31146105f6578063d3feb6021461060f57600080fd5b806390333ba8116100f957806390333ba814610515578063a0c3774f14610528578063a33741771461053b578063a5900c4d1461056e57600080fd5b80636b123919146104d45780637125590a146104e75780637cbd3a56146104fa5780638456cb591461050d57600080fd5b80633f4ba83a116101bd5780634fd49efd1161018c5780635670e2ce116101715780635670e2ce146104415780635ea54eee1461045c5780636aacaad81461048857600080fd5b80634fd49efd146103de57806351a424b11461040957600080fd5b80633f4ba83a14610374578063423a4b401461037c57806342d4693e1461038f5780634a45a3a8146103a957600080fd5b8063221a8c68116101f9578063221a8c68146102975780632384c32d1461033b57806330eae5721461034e5780633bd9ef281461036157600080fd5b80630ef917ed1461022b5780630fe105e814610240578063119a5e96146102535780632197238414610284575b600080fd5b61023e610239366004614498565b610681565b005b61023e61024e3660046144c6565b6106c6565b61025b610717565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61023e610292366004614674565b61074e565b6103096102a5366004614498565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161027b565b61023e610349366004614738565b610816565b61023e61035c36600461478d565b61085d565b61023e61036f3660046147a8565b6108b2565b61023e61099e565b61023e61038a366004614738565b610a5b565b600f5461039c9060ff1681565b60405161027b9190614803565b6103d07f4f1a5aef466c18f2eefd210f80b744aa3b40590af293e84b695be7d70fd862b381565b60405190815260200161027b565b6001546103f1906001600160a01b031681565b6040516001600160a01b03909116815260200161027b565b61041c610417366004614498565b610aa2565b604080516001600160a01b03909416845260208401929092529082015260600161027b565b6002546003546040805192835260208301919091520161027b565b60065460075460085460095460408051948552602085019390935291830152606082015260800161027b565b6103096040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b601c546103f1906001600160a01b031681565b61023e6104f5366004614844565b610acb565b61023e610508366004614b57565b610b0e565b61023e610c92565b61023e610523366004614c68565b610d53565b6103d0610536366004614498565b610d98565b61041c604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61041c61057c366004614498565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546105d59060ff1681565b604051901515815260200161027b565b601d546001600160a01b03166103f1565b6000546103f1906201000090046001600160a01b031681565b61023e61061d366004614c68565b610db8565b610309610630366004614498565b610dfd565b61023e610643366004614498565b610e6c565b61023e610656366004614c9d565b610ead565b601d546103f1906001600160a01b031681565b6105d561067c366004614498565b610ef4565b61068a81610f32565b6106b9336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b6106c282610f8d565b5050565b6106d58460ff1684848461102f565b610704336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b610710858585856110da565b5050505050565b600a5460009081908190819060ff166002811115610737576107376147d4565b600b54600c54600e54935093509350935090919293565b61077c336000357fffffffff0000000000000000000000000000000000000000000000000000000016611497565b80518251146107b7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610811576107ff8382815181106107d8576107d8614ccf565b60200260200101518383815181106107f2576107f2614ccf565b60200260200101516114b3565b8061080981614d2d565b9150506107ba565b505050565b6108228484848461155d565b610851336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b610710858585856115c6565b61087a816001811115610872576108726147d4565b60ff1661167f565b6108a9336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b6106c2826116c6565b6108bc8282611741565b6108eb336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b816000036108ff576108fc83610d98565b91505b61090983836117b0565b600154601c546001600160a01b0391821691634ae00041911661092c8686611834565b60006040518463ffffffff1660e01b815260040161094c93929190614db5565b6000604051808303816000875af115801561096b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109939190810190614de7565b506108118383611977565b6109cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611497565b60045460ff16610a08576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610a678484848461155d565b610a96336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b6107108585858561198b565b600080600080610ab185611a4b565b805160208201516040909201519097919650945092505050565b610ad58282611ad6565b610b04336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b6108118383611b30565b600054610100900460ff1615808015610b2e5750600054600160ff909116105b80610b485750303b158015610b48575060005460ff166001145b610bbf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610c1d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610c28848484611b75565b8015610c8c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b50505050565b610cc0336000357fffffffff0000000000000000000000000000000000000000000000000000000016611497565b60045460ff1615610cfd576040517fc0f2312800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610d5e838383611bf4565b610d8d336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b610c8c848484611c86565b601d54600090610db29083906001600160a01b0316611cdc565b92915050565b610dc3838383611bf4565b610df2336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b610c8c848484611d9d565b600080600080600080610e0f87611df9565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610e7581610f32565b610ea4336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b6106c282611e2d565b610eb98484848461102f565b610ee8336000357fffffffff000000000000000000000000000000000000000000000000000000001683610f46565b61071085858585611ecf565b600080610f02601084611f6a565b90506001600f5460ff166001811115610f1d57610f1d6147d4565b14610f29578015610f2b565b805b9392505050565b6060610db2826001600160a01b031661167f565b610f51838383611f8c565b610811578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610bb693929190614eb6565b6001600160a01b038116610fcd576040517fdb6cf18100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f0c7d25a41bb896a3d198b4b4593a58cb7f37d8340b0b58bffa244676e2ef803a90600090a250565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061106657611066614ccf565b602002602001018181525050838160018151811061108657611086614ccf565b60200260200101818152505082816002815181106110a6576110a6614ccf565b60200260200101818152505081816003815181106110c6576110c6614ccf565b602002602001018181525050949350505050565b60ff84166111d65760008111806110f15750600082115b156111d1578260000361113c576040517fbea499cb00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101849052604401610bb6565b80158061114857508281115b1561118b576040517f9e12fccf00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101829052604401610bb6565b816000036111d1576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610bb6565b6113ec565b8260000361121c576040517fbea499cb00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101849052604401610bb6565b80158061123457506112316224ea0084614f00565b81115b15611277576040517f9e12fccf00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101829052604401610bb6565b816000036112bd576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610bb6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff85160161133657601c6112f28361202a565b11156111d1576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610bb6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8516016113b55761136982612041565b6113728361202a565b146111d1576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610bb6565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610bb6565b8360ff166002811115611401576114016147d4565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600281111561143b5761143b6147d4565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e41290608001610c83565b6040805160008152602081019091526106c29083908390610f46565b6001600160a01b0382166114f3576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061150857611503601083612064565b611513565b611513601083612079565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611551911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061159d5761159d614ccf565b602002602001018181525050836001600160a01b03168160018151811061108657611086614ccf565b6001600160a01b038416611606576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061162a9084848461208e565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106116b5576116b5614ccf565b602002602001018181525050919050565b600f80548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018381811115611702576117026147d4565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516117369190614803565b60405180910390a150565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061177e5761177e614ccf565b602002602001018181525050818160018151811061179e5761179e614ccf565b60200260200101818152505092915050565b6117ba8282612176565b6001600160a01b0382166117fa576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036106c2576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160018082528183019092526060916000919060208083019080368337019050509050838160008151811061186e5761186e614ccf565b6001600160a01b03929092166020928302919091019091015260408051600180825281830190925260009181602001602082028036833701905050905083816000815181106118bf576118bf614ccf565b60209081029190910101526001546040517f6daefab6000000000000000000000000000000000000000000000000000000009161190e91859185916001600160a01b0390911690602401614f17565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529250505092915050565b61198182826121bc565b6106c2828261225b565b6001600160a01b0384166119cb576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119ef90848484612283565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a3d929190918252602082015260400190565b60405180910390a350505050565b611a78604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611aa15780611aa4565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611b0d57611b0d614ccf565b6020026020010181815250508160001c8160018151811061179e5761179e614ccf565b8115611b6b576040517fade7e16800000000000000000000000000000000000000000000000000000000815260048101839052602401610bb6565b6106c282826123fa565b600054610100900460ff16611be05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b611be98361247d565b610811838383612548565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611c3357611c33614ccf565b6020026020010181815250508281600181518110611c5357611c53614ccf565b6020026020010181815250508181600281518110611c7357611c73614ccf565b6020026020010181815250509392505050565b611c936016848484612283565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03841603611d1357506001600160a01b03811631610db2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015611d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d969190614f88565b9050610db2565b611daa601284848461208e565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611e245780610f2b565b60169392505050565b6001600160a01b038116611e6d576040517f382928fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517ffdbd8fd3124d4abea1394a5bf9d535d8b716508569491ceae023fc8f0221c73a90600090a250565b670de0b6b3a7640000811115611f11576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001610c83565b6001600160a01b03811660009081526001830160205260408120541515610f2b565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611fe1908790309088908890600401614fa1565b602060405180830381865afa158015611ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120229190614fff565b949350505050565b600061202261203c620151808461504b565b6125c5565b6000808061205561203c620151808661504b565b5091509150612022828261267f565b6000610f2b836001600160a01b038416612705565b6000610f2b836001600160a01b0384166127ff565b60006001600160a01b0384161580156120a5575082155b80156120af575081155b905060006001600160a01b038516158015906120d357508215806120d35750838310155b9050811580156120e1575080155b15612131576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610bb6565b505083547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03939093169290921783556001830155600290910155565b612180828261284e565b61218a8282612858565b6121948282612895565b61219e8282612981565b6121a88282612bd4565b6121b28282612c1e565b6106c28282612d0b565b600354156106c257600180546003546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b15801561223f57600080fd5b505af1158015612253573d6000803e3d6000fd5b505050505050565b6122658282612e21565b61226f8282612ec3565b6122798282612ee5565b6106c2828261312f565b60006001600160a01b03841615801561229a575082155b80156122a4575081155b905060006001600160a01b038516158015906122c05750600084115b80156122cc5750600083115b9050811580156122da575080155b1561232a576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610bb6565b600386018390556001860184905581156123515760006002870181905560048701556123bd565b8560040154600003612378576000600287015561236e834261505f565b60048701556123bd565b85546001600160a01b038681169116146123bd5785546000906123a4906001600160a01b03168761315c565b60028801549091506123b69082613168565b6002880155505b505083547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179092555050565b808214801561240857508115155b15612442576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610bb6565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff166124e85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b80516124f3906131de565b6124fb6132c0565b6125088160200151613335565b61251581604001516133a9565b612522816060015161341d565b61252f8160800151613491565b61253c8160a00151613505565b61254581613579565b50565b600054610100900460ff166125b35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b6125bc82611e2d565b61081181610f8d565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816126225761262261501c565b0590506000605061098f83020585039050600b82057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf94909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806126905750816003145b8061269b5750816005145b806126a65750816007145b806126b15750816008145b806126bc575081600a145b806126c7575081600c145b156126d45750601f610db2565b816002146126e45750601e610db2565b6126ed836135e4565b6126f857601c6126fb565b601d5b60ff169392505050565b600081815260018301602052604081205480156127ee576000612729600183615072565b855490915060009061273d90600190615072565b90508181146127a257600086600001828154811061275d5761275d614ccf565b906000526020600020015490508087600001848154811061278057612780614ccf565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806127b3576127b3615085565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610db2565b6000915050610db2565b5092915050565b600081815260018301602052604081205461284657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610db2565b506000610db2565b6106c28282613620565b60045460ff16156106c2576040517fc0f2312800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806128d4575081513a11155b9050806129195781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610bb6565b602082015115610c8c57600061292f483a615072565b6020840151909150811115806122535760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610bb6918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156129d6576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610bb6565b60008460028111156129ea576129ea6147d4565b03612abc57826000036129ff57505050505050565b80600003612a1957612a11834261505f565b600d55612253565b6000612a258342615072565b90506000612a33858361504b565b90506000612a418683614f00565b612a4b9084615072565b905083811115612a90576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101869052604401610bb6565b85612a9c83600161505f565b612aa69190614f00565b612ab0908661505f565b600d5550612253915050565b814210158015612ad55750612ad1818361505f565b4211155b15612ae457612a11828461368c565b60006001856002811115612afa57612afa6147d4565b14612b0d57612b0842612041565b612b16565b612b168361202a565b90506000612b248483613724565b905080421015612b69576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101829052604401610bb6565b6000612b75848361505f565b90504281108015612bbb576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610bb6565b612bc5838861368c565b600d5550505050505050505050565b612bdd82610ef4565b6106c2576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610bb6565b6000612c2983611a4b565b80519091506001600160a01b0316612c4057505050565b6000836001600160a01b031682600001516001600160a01b031614612c7c57612c77612c7085846000015161315c565b8490613168565b612c7e565b825b9050600082602001518210158015612ca6575060408301511580612ca6575082604001518211155b905080610710578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610bb6565b6000612d1683611df9565b6040805160a08101825282546001600160a01b031680825260018401546020830152600284015492820192909252600383015460608201526004909201546080830152909150612d6557505050565b6000836001600160a01b031682600001516001600160a01b031614612d9a57612d95612c7085846000015161315c565b612d9c565b825b9050600082608001514210612db2576000612db8565b82604001515b612dc2908361505f565b9050826020015181111561071057825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610bb6565b6000612e2c83611df9565b80549091506001600160a01b0316612e4357505050565b80546000906001600160a01b03858116911614612e79578154612e7490612c709086906001600160a01b031661315c565b612e7b565b825b905081600401544210612ea457600060028301556003820154612e9e904261505f565b60048301555b80826002016000828254612eb8919061505f565b909155505050505050565b600d54600003612ed1575050565b612edc600d5461374c565b50506000600d55565b600554600003612f21576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612f5a9190615072565b90506000612f683a83614f00565b90506000836040015160001480612f83575083604001518211155b905080612fcd578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610bb6929190918252602082015260400190565b6000600555606084015115801590612fe55750600085115b156122535760006130b8306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561302d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305191906150b4565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561308e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b291906150b4565b8861315c565b905060006130c68483613781565b905060006130d4828961382a565b905086606001518111156131245760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610bb6918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b6000610f2b83836138f3565b6000828202831580159061318b5750828482816131875761318761501c565b0414155b156131cc576040517fe8e4a4fa0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610bb6565b670de0b6b3a764000090049392505050565b600054610100900460ff166132495760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b6132b781600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa15801561328e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b291906150b4565b613b01565b61254581613b75565b600054610100900460ff1661332b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b613333613c2d565b565b600054610100900460ff166133a05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b61254581613c98565b600054610100900460ff166134145760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b61254581613d1f565b600054610100900460ff166134885760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b61254581613da6565b600054610100900460ff166134fc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b61254581613e66565b600054610100900460ff166135705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b61254581613f56565b600054610100900460ff166125455760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b60006135f16004836150d1565b15801561360757506136046064836150d1565b15155b80610db25750613619610190836150d1565b1592915050565b600254156106c2576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612225565b60008060008061369b86614046565b9194509250905060006136ae868461505f565b905060006136bd600c836150d1565b905060006136cc600c8461504b565b6136d6908761505f565b905060006002600a5460ff1660028111156136f3576136f36147d4565b146136fe5784613708565b613708828461267f565b90506137168a838584614065565b9a9950505050505050505050565b600080600061373242614046565b509150915061374385838387614065565b95945050505050565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611736565b600082820283158015906137a45750828482816137a0576137a061501c565b0414155b156137e5576040517fe8e4a4fa0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610bb6565b801561382057670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820104600101612022565b6000949350505050565b600081600003613866576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361387657506000610db2565b670de0b6b3a7640000838102908482816138925761389261501c565b04146138d4576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610bb6565b8260018203816138e6576138e661501c565b0460010191505092915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396d91906150b4565b90506001600160a01b0381166139be576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610bb6565b60006139c861408d565b90508051600014613a5957816001600160a01b031663355efdd96139eb8761410d565b6139f48761410d565b846040518463ffffffff1660e01b8152600401613a13939291906150e5565b602060405180830381865afa158015613a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a549190614f88565b613743565b816001600160a01b031663ac41865a613a718761410d565b613a7a8761410d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613add573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137439190614f88565b600054610100900460ff16613b6c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b61254581614141565b600054610100900460ff16613be05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b8051600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055602081015160408201516125459190611b30565b600054610100900460ff166133335760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b600054610100900460ff16613d035760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b6125458160000151826020015183604001518460600151611ecf565b600054610100900460ff16613d8a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b61254581600001518260200151836040015184606001516110da565b600054610100900460ff16613e115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b8051613e1c906116c6565b60005b8160200151518110156106c257613e5482602001518281518110613e4557613e45614ccf565b602002602001015160016114b3565b80613e5e81614d2d565b915050613e1f565b600054610100900460ff16613ed15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b8051805160208201516040830151613eea929190611d9d565b60005b82602001515181101561081157600083602001518281518110613f1257613f12614ccf565b60200260200101519050600081602001519050613f4182600001518260000151836020015184604001516115c6565b50508080613f4e90614d2d565b915050613eed565b600054610100900460ff16613fc15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b8051805160208201516040830151613fda929190611c86565b60005b8260200151518110156108115760008360200151828151811061400257614002614ccf565b60200260200101519050600081602001519050614031826000015182600001518360200151846040015161198b565b5050808061403e90614d2d565b915050613fdd565b600080806140586201518085046125c5565b9196909550909350915050565b6000613743848484614076896141ec565b61407f8a61420a565b6140888b614226565b614233565b6060600061409961428f565b9050368111156140b757505060408051600081526020810190915290565b8067ffffffffffffffff8111156140d0576140d06144ff565b6040519080825280601f01601f1916602001820160405280156140fa576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146141395781610db2565b610db26142aa565b600054610100900460ff166141ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb6565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000806141fc62015180846150d1565b9050610f2b610e108261504b565b600080614219610e10846150d1565b9050610f2b603c8261504b565b6000610db2603c836150d1565b600081614241603c85614f00565b61424d610e1087614f00565b6201518061425c8b8b8b614336565b6142669190614f00565b614270919061505f565b61427a919061505f565b614284919061505f565b979650505050505050565b600060243610156142a05750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa15801561430d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061433191906150b4565b905090565b60006107b284101561434757600080fd5b838383600062253d8c60046064600c614361600e88615111565b61436b9190615131565b61437788611324615199565b6143819190615199565b61438b9190615131565b6143969060036151c1565b6143a09190615131565b600c806143ae600e88615111565b6143b89190615131565b6143c390600c6151c1565b6143ce600288615111565b6143d89190615111565b6143e49061016f6151c1565b6143ee9190615131565b6004600c6143fd600e89615111565b6144079190615131565b614413896112c0615199565b61441d9190615199565b614429906105b56151c1565b6144339190615131565b61443f617d4b87615111565b6144499190615199565b6144539190615199565b61445d9190615111565b6144679190615111565b98975050505050505050565b6001600160a01b038116811461254557600080fd5b803561449381614473565b919050565b6000602082840312156144aa57600080fd5b8135610f2b81614473565b803560ff8116811461449357600080fd5b600080600080608085870312156144dc57600080fd5b6144e5856144b5565b966020860135965060408601359560600135945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715614551576145516144ff565b60405290565b6040805190810167ffffffffffffffff81118282101715614551576145516144ff565b60405160c0810167ffffffffffffffff81118282101715614551576145516144ff565b604051601f8201601f1916810167ffffffffffffffff811182821017156145c6576145c66144ff565b604052919050565b600067ffffffffffffffff8211156145e8576145e86144ff565b5060051b60200190565b600082601f83011261460357600080fd5b81356020614618614613836145ce565b61459d565b82815260059290921b8401810191818101908684111561463757600080fd5b8286015b8481101561465b57803561464e81614473565b835291830191830161463b565b509695505050505050565b801515811461254557600080fd5b6000806040838503121561468757600080fd5b823567ffffffffffffffff8082111561469f57600080fd5b6146ab868387016145f2565b93506020915081850135818111156146c257600080fd5b85019050601f810186136146d557600080fd5b80356146e3614613826145ce565b81815260059190911b8201830190838101908883111561470257600080fd5b928401925b8284101561472957833561471a81614666565b82529284019290840190614707565b80955050505050509250929050565b6000806000806080858703121561474e57600080fd5b843561475981614473565b9350602085013561476981614473565b93969395505050506040820135916060013590565b80356002811061449357600080fd5b60006020828403121561479f57600080fd5b610f2b8261477e565b600080604083850312156147bb57600080fd5b82356147c681614473565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016002831061483e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561485757600080fd5b50508035926020909101359150565b60006060828403121561487857600080fd5b6040516060810181811067ffffffffffffffff8211171561489b5761489b6144ff565b60405290508082356148ac81614473565b8082525060208301356020820152604083013560408201525092915050565b6000608082840312156148dd57600080fd5b6148e561452e565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b60006080828403121561492157600080fd5b61492961452e565b9050614934826144b5565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561496c57600080fd5b614974614557565b905061497f8261477e565b8152602082013567ffffffffffffffff81111561499b57600080fd5b6149a7848285016145f2565b60208301525092915050565b6000608082840312156149c557600080fd5b6149cd614557565b905081356149da81614473565b81526149e98360208401614866565b602082015292915050565b60006080808385031215614a0757600080fd5b614a0f614557565b9150614a1b8484614866565b8252606083013567ffffffffffffffff811115614a3757600080fd5b8301601f81018513614a4857600080fd5b80356020614a58614613836145ce565b82815260079290921b83018101918181019088841115614a7757600080fd5b938201935b83851015614a9d57614a8e89866149b3565b82529385019390820190614a7c565b808388015250505050505092915050565b60006080808385031215614ac157600080fd5b614ac9614557565b9150614ad58484614866565b8252606083013567ffffffffffffffff811115614af157600080fd5b8301601f81018513614b0257600080fd5b80356020614b12614613836145ce565b82815260079290921b83018101918181019088841115614b3157600080fd5b938201935b83851015614a9d57614b4889866149b3565b82529385019390820190614b36565b600080600060608486031215614b6c57600080fd5b833567ffffffffffffffff80821115614b8457600080fd5b908501906101c08288031215614b9957600080fd5b614ba161457a565b614bab8884614866565b8152614bba88606085016148cb565b6020820152614bcc8860e0850161490f565b604082015261016083013582811115614be457600080fd5b614bf08982860161495a565b60608301525061018083013582811115614c0957600080fd5b614c15898286016149f4565b6080830152506101a083013582811115614c2e57600080fd5b614c3a89828601614aae565b60a0830152509450614c5191505060208501614488565b9150614c5f60408501614488565b90509250925092565b600080600060608486031215614c7d57600080fd5b8335614c8881614473565b95602085013595506040909401359392505050565b60008060008060808587031215614cb357600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d5e57614d5e614cfe565b5060010190565b60005b83811015614d80578181015183820152602001614d68565b50506000910152565b60008151808452614da1816020860160208601614d65565b601f01601f19169290920160200192915050565b6001600160a01b0384168152606060208201526000614dd76060830185614d89565b9050826040830152949350505050565b600060208284031215614df957600080fd5b815167ffffffffffffffff80821115614e1157600080fd5b818401915084601f830112614e2557600080fd5b815181811115614e3757614e376144ff565b614e4a6020601f19601f8401160161459d565b9150808252856020828501011115614e6157600080fd5b614e72816020840160208601614d65565b50949350505050565b600081518084526020808501945080840160005b83811015614eab57815187529582019590820190600101614e8f565b509495945050505050565b6001600160a01b03841681527fffffffff00000000000000000000000000000000000000000000000000000000831660208201526060604082015260006137436060830184614e7b565b8082028115828204841417610db257610db2614cfe565b606080825284519082018190526000906020906080840190828801845b82811015614f595781516001600160a01b031684529284019290840190600101614f34565b50505083810382850152614f6d8187614e7b565b925050506001600160a01b0383166040830152949350505050565b600060208284031215614f9a57600080fd5b5051919050565b60006001600160a01b0380871683528086166020840152507fffffffff000000000000000000000000000000000000000000000000000000008416604083015260806060830152614ff56080830184614e7b565b9695505050505050565b60006020828403121561501157600080fd5b8151610f2b81614666565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261505a5761505a61501c565b500490565b80820180821115610db257610db2614cfe565b81810381811115610db257610db2614cfe565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000602082840312156150c657600080fd5b8151610f2b81614473565b6000826150e0576150e061501c565b500690565b60006001600160a01b038086168352808516602084015250606060408301526137436060830184614d89565b81810360008312801583831316838312821617156127f8576127f8614cfe565b6000826151405761514061501c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561519457615194614cfe565b500590565b80820182811260008312801582168215821617156151b9576151b9614cfe565b505092915050565b808202600082127f8000000000000000000000000000000000000000000000000000000000000000841416156151f9576151f9614cfe565b8181058314821517610db257610db2614cfe56fea2646970667358221220fcb453697a61b7bbfe1bf893d7e4c4a19548343434f918d036a8085d9c87dc5464736f6c63430008110033