diff --git a/contracts/TokenHub.sol b/contracts/TokenHub.sol index aa8c0931..8a483ba9 100644 --- a/contracts/TokenHub.sol +++ b/contracts/TokenHub.sol @@ -99,6 +99,11 @@ contract TokenHub is ITokenHub, System{ + modifier sequenceInOrder(uint64 sequence, uint64 expectedSequence) { + require(sequence == expectedSequence, "sequence not in order"); + _; + } + function bep2TokenSymbolConvert(string memory symbol) public pure returns(bytes32) { bytes32 result; assembly { @@ -168,8 +173,7 @@ contract TokenHub is ITokenHub, System{ return bindPackage; } - function handleBindPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) blockSynced(height) onlyRelayer override external returns (bool) { - require(packageSequence==_bindChannelSequence, "wrong bind sequence"); + function handleBindPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) sequenceInOrder(packageSequence, _bindChannelSequence) blockSynced(height) onlyRelayer override external returns (bool) { require(msgBytes.length==157, "wrong bind package size"); bytes32 appHash = ILightClient(LIGHT_CLIENT_ADDR).getAppHash(height); require(MerkleProof.validateMerkleProof(appHash, STORE_NAME, generateKey(_bindChannelSequence, BIND_CHANNEL_ID), msgBytes, proof), "invalid merkle proof"); @@ -338,8 +342,7 @@ contract TokenHub is ITokenHub, System{ return transferInPackage; } - function handleTransferInPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) blockSynced(height) onlyRelayer override external returns (bool) { - require(packageSequence==_transferInChannelSequence, "wrong transfer sequence"); + function handleTransferInPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) sequenceInOrder(packageSequence, _transferInChannelSequence) blockSynced(height) onlyRelayer override external returns (bool) { require(msgBytes.length==164, "wrong transfer package size"); bytes32 appHash = ILightClient(LIGHT_CLIENT_ADDR).getAppHash(height); require(MerkleProof.validateMerkleProof(appHash, STORE_NAME, generateKey(_transferInChannelSequence, TRANSFER_IN_CHANNEL_ID), msgBytes, proof), "invalid merkle proof"); @@ -446,8 +449,7 @@ contract TokenHub is ITokenHub, System{ return refundPackage; } - function handleRefundPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) blockSynced(height) onlyRelayer override external returns (bool) { - require(packageSequence==_refundChannelSequence, "wrong refund sequence"); + function handleRefundPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) sequenceInOrder(packageSequence, _refundChannelSequence) blockSynced(height) onlyRelayer override external returns (bool) { require(msgBytes.length==74, "wrong refund package size"); bytes32 appHash = ILightClient(LIGHT_CLIENT_ADDR).getAppHash(height); require(MerkleProof.validateMerkleProof(appHash, STORE_NAME, generateKey(_refundChannelSequence,REFUND_CHANNEL_ID), msgBytes, proof), "invalid merkle proof"); diff --git a/contracts/TokenHub.template b/contracts/TokenHub.template index 1eb6c762..a372a7e4 100644 --- a/contracts/TokenHub.template +++ b/contracts/TokenHub.template @@ -102,6 +102,11 @@ contract TokenHub is ITokenHub, System{ {% else %} {% endif %} + modifier sequenceInOrder(uint64 sequence, uint64 expectedSequence) { + require(sequence == expectedSequence, "sequence not in order"); + _; + } + function bep2TokenSymbolConvert(string memory symbol) public pure returns(bytes32) { bytes32 result; assembly { @@ -171,8 +176,7 @@ contract TokenHub is ITokenHub, System{ return bindPackage; } - function handleBindPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) blockSynced(height) onlyRelayer override external returns (bool) { - require(packageSequence==_bindChannelSequence, "wrong bind sequence"); + function handleBindPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) sequenceInOrder(packageSequence, _bindChannelSequence) blockSynced(height) onlyRelayer override external returns (bool) { require(msgBytes.length==157, "wrong bind package size"); bytes32 appHash = ILightClient(LIGHT_CLIENT_ADDR).getAppHash(height); require(MerkleProof.validateMerkleProof(appHash, STORE_NAME, generateKey(_bindChannelSequence, BIND_CHANNEL_ID), msgBytes, proof), "invalid merkle proof"); @@ -341,8 +345,7 @@ contract TokenHub is ITokenHub, System{ return transferInPackage; } - function handleTransferInPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) blockSynced(height) onlyRelayer override external returns (bool) { - require(packageSequence==_transferInChannelSequence, "wrong transfer sequence"); + function handleTransferInPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) sequenceInOrder(packageSequence, _transferInChannelSequence) blockSynced(height) onlyRelayer override external returns (bool) { require(msgBytes.length==164, "wrong transfer package size"); bytes32 appHash = ILightClient(LIGHT_CLIENT_ADDR).getAppHash(height); require(MerkleProof.validateMerkleProof(appHash, STORE_NAME, generateKey(_transferInChannelSequence, TRANSFER_IN_CHANNEL_ID), msgBytes, proof), "invalid merkle proof"); @@ -449,8 +452,7 @@ contract TokenHub is ITokenHub, System{ return refundPackage; } - function handleRefundPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) blockSynced(height) onlyRelayer override external returns (bool) { - require(packageSequence==_refundChannelSequence, "wrong refund sequence"); + function handleRefundPackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence) sequenceInOrder(packageSequence, _refundChannelSequence) blockSynced(height) onlyRelayer override external returns (bool) { require(msgBytes.length==74, "wrong refund package size"); bytes32 appHash = ILightClient(LIGHT_CLIENT_ADDR).getAppHash(height); require(MerkleProof.validateMerkleProof(appHash, STORE_NAME, generateKey(_refundChannelSequence,REFUND_CHANNEL_ID), msgBytes, proof), "invalid merkle proof"); diff --git a/genesis.json b/genesis.json index 4860d66a..4a8b11af 100644 --- a/genesis.json +++ b/genesis.json @@ -45,7 +45,7 @@ }, "0x0000000000000000000000000000000000001004": { "balance": "180000000000000000000000000", - "code": "0x60806040526004361061025c5760003560e01c80639a854bbd11610144578063d398809b116100b6578063dc927faf1161007a578063dc927faf14610b8f578063df01411914610ba4578063e106363514610c1a578063f5d3151914610ccb578063f9a2bbc714610d7e578063fd6a687914610d935761025c565b8063d398809b14610af3578063d43b8c5b14610b23578063d891ccb214610b65578063dac3f64f14610b7a578063dc6f5e90146106285761025c565b8063b9fd21e311610108578063b9fd21e3146109ae578063bd038949146109c3578063c3dc4d9a146109d8578063c81b1662146109ed578063cc12eabc14610a02578063ccb27f6a14610a175761025c565b80639a854bbd1461095a5780639dc092621461096f578063a1a11bf514610984578063aae2768c146103c3578063b7701861146109995761025c565b80636bc2ecdb116101dd57806372c4e086116101a157806372c4e0861461069157806375405d0d1461074257806377d9dae8146107575780637f6a7a9e14610818578063964c0dcd1461084b5780639710e7f6146109275761025c565b80636bc2ecdb146106285780636e47b4821461063d5780636fd31f8114610652578063716c9dd5146106675780637194c9671461067c5761025c565b80634e4a70e6116102245780634e4a70e6146104f75780635da9b1f214610528578063613684751461039857806366be79451461053d5780636b3f1307146105675761025c565b8063053799cf14610261578063077b8f351461039857806314e68d82146103c35780632eb881b0146103ea57806343756e5c146104c6575b600080fd5b610384600480360360c081101561027757600080fd5b810190602081018135600160201b81111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460208302840111600160201b831117156102c457600080fd5b919390929091602081019035600160201b8111156102e157600080fd5b8201836020820111156102f357600080fd5b803590602001918460208302840111600160201b8311171561031457600080fd5b919390929091602081019035600160201b81111561033157600080fd5b82018360208201111561034357600080fd5b803590602001918460208302840111600160201b8311171561036457600080fd5b91935091506001600160a01b038135169060208101359060400135610da8565b604080519115158252519081900360200190f35b3480156103a457600080fd5b506103ad611553565b6040805160ff9092168252519081900360200190f35b3480156103cf57600080fd5b506103d8611558565b60408051918252519081900360200190f35b3480156103f657600080fd5b506103846004803603608081101561040d57600080fd5b810190602081018135600160201b81111561042757600080fd5b82018360208201111561043957600080fd5b803590602001918460018302840111600160201b8311171561045a57600080fd5b919390929091602081019035600160201b81111561047757600080fd5b82018360208201111561048957600080fd5b803590602001918460018302840111600160201b831117156104aa57600080fd5b91935091506001600160401b0381358116916020013516611563565b3480156104d257600080fd5b506104db611b5c565b604080516001600160a01b039092168252519081900360200190f35b34801561050357600080fd5b5061050c611b62565b604080516001600160401b039092168252519081900360200190f35b34801561053457600080fd5b5061050c611b78565b34801561054957600080fd5b506104db6004803603602081101561056057600080fd5b5035611b8e565b34801561057357600080fd5b506103846004803603604081101561058a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105b457600080fd5b8201836020820111156105c657600080fd5b803590602001918460018302840111600160201b831117156105e757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ba9945050505050565b34801561063457600080fd5b506103ad612449565b34801561064957600080fd5b506104db61244e565b34801561065e57600080fd5b506103d8612454565b34801561067357600080fd5b5061050c612459565b34801561068857600080fd5b506103d8612468565b34801561069d57600080fd5b50610384600480360360208110156106b457600080fd5b810190602081018135600160201b8111156106ce57600080fd5b8201836020820111156106e057600080fd5b803590602001918460018302840111600160201b8311171561070157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061246d945050505050565b34801561074e57600080fd5b506103d8612670565b34801561076357600080fd5b506103846004803603604081101561077a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107a457600080fd5b8201836020820111156107b657600080fd5b803590602001918460018302840111600160201b831117156107d757600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061267b945050505050565b34801561082457600080fd5b506103d86004803603602081101561083b57600080fd5b50356001600160a01b031661293c565b34801561085757600080fd5b506103846004803603608081101561086e57600080fd5b810190602081018135600160201b81111561088857600080fd5b82018360208201111561089a57600080fd5b803590602001918460018302840111600160201b831117156108bb57600080fd5b919390929091602081019035600160201b8111156108d857600080fd5b8201836020820111156108ea57600080fd5b803590602001918460018302840111600160201b8311171561090b57600080fd5b91935091506001600160401b038135811691602001351661294e565b34801561093357600080fd5b506103d86004803603602081101561094a57600080fd5b50356001600160a01b0316613c26565b34801561096657600080fd5b506103d8613c38565b34801561097b57600080fd5b506104db613c44565b34801561099057600080fd5b506104db613c4a565b3480156109a557600080fd5b506103d8613c50565b3480156109ba57600080fd5b506103d8613c56565b3480156109cf57600080fd5b5061050c613c60565b3480156109e457600080fd5b506103ad612454565b3480156109f957600080fd5b506104db613c76565b348015610a0e57600080fd5b506103ad613c7c565b348015610a2357600080fd5b5061038460048036036080811015610a3a57600080fd5b810190602081018135600160201b811115610a5457600080fd5b820183602082011115610a6657600080fd5b803590602001918460018302840111600160201b83111715610a8757600080fd5b919390929091602081019035600160201b811115610aa457600080fd5b820183602082011115610ab657600080fd5b803590602001918460018302840111600160201b83111715610ad757600080fd5b91935091506001600160401b0381358116916020013516613c81565b348015610aff57600080fd5b506103d860048036036040811015610b1657600080fd5b5080359060200135614aa5565b610384600480360360a0811015610b3957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135614aec565b348015610b7157600080fd5b5061050c614fb8565b348015610b8657600080fd5b5061050c614fc7565b348015610b9b57600080fd5b506104db614fdd565b348015610bb057600080fd5b50610bce60048036036020811015610bc757600080fd5b5035614fe3565b604080519788526001600160a01b03909616602088015286860194909452606086019290925260ff1660808501526001600160401b031660a084015260c0830152519081900360e00190f35b348015610c2657600080fd5b506103d860048036036020811015610c3d57600080fd5b810190602081018135600160201b811115610c5757600080fd5b820183602082011115610c6957600080fd5b803590602001918460018302840111600160201b83111715610c8a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550615036945050505050565b348015610cd757600080fd5b5061038460048036036040811015610cee57600080fd5b810190602081018135600160201b811115610d0857600080fd5b820183602082011115610d1a57600080fd5b803590602001918460018302840111600160201b83111715610d3b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061503d915050565b348015610d8a57600080fd5b506104db6151bb565b348015610d9f57600080fd5b506104db6151c1565b6000888714610de85760405162461bcd60e51b815260040180806020018281038252603b815260200180615a9e603b913960400191505060405180910390fd5b888514610e265760405162461bcd60e51b815260040180806020018281038252603f81526020018061594e603f913960400191505060405180910390fd5b662386f26fc10000610e3e838963ffffffff6151c716565b1015610e8a576040805162461bcd60e51b815260206004820152601660248201527572656c617946656520697320746f6f206c6974746c6560501b604482015290519081900360640190fd5b6402540be400820615610ee4576040805162461bcd60e51b815260206004820152601760248201527f72656c6179466565206d757374206265204e2a31653130000000000000000000604482015290519081900360640190fd5b42607801831015610f265760405162461bcd60e51b81526004018080602001828103825260248152602001806157df6024913960400191505060405180910390fd5b6000805b88811015610f6157610f578a8a83818110610f4157fe5b905060200201358361520990919063ffffffff16565b9150600101610f2a565b50604080518981526020808b02820101909152606090898015610f8e578160200160208202803683370190505b50905060006001600160a01b0387166110cf5760005b60ff81168b1115611074576402540be4008c8c8360ff16818110610fc457fe5b9050602002013581610fd257fe5b0615611025576040805162461bcd60e51b815260206004820152601760248201527f696e76616c6964207472616e7366657220616d6f756e74000000000000000000604482015290519081900360640190fd5b6110526402540be4008d8d8460ff1681811061103d57fe5b905060200201356151c790919063ffffffff16565b838260ff168151811061106157fe5b6020908102919091010152600101610fa4565b50611085838663ffffffff61520916565b34146110c25760405162461bcd60e51b815260040180806020018281038252604c8152602001806158dd604c913960600191505060405180910390fd5b506221272160e91b611382565b6001600160a01b038716600090815260026020526040812054905b8b81101561126057600882111580611136575060088211801561113657506111346007198301600a0a8e8e8481811061111f57fe5b9050602002013561526390919063ffffffff16565b155b6111715760405162461bcd60e51b815260040180806020018281038252603c8152602001806159bd603c913960400191505060405180910390fd5b600061118f8e8e8481811061118257fe5b9050602002013584614aa5565b90506008831015806111bd57506008831080156111bd57508d8d838181106111b357fe5b9050602002013581115b6111f85760405162461bcd60e51b81526004018080602001828103825260258152602001806159296025913960400191505060405180910390fd5b677ce66c50e284000081111561123f5760405162461bcd60e51b81526004018080602001828103825260358152602001806158236035913960400191505060405180910390fd5b8085838151811061124c57fe5b6020908102919091010152506001016110ea565b506001600160a01b0388166000908152600160205260409020549150816112b85760405162461bcd60e51b815260040180806020018281038252603081526020018061598d6030913960400191505060405180910390fd5b8534146112f65760405162461bcd60e51b815260040180806020018281038252602d815260200180615ad9602d913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038a16916323b872dd9160648083019260209291908290030181600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b505050506040513d602081101561137557600080fd5b505161138057600080fd5b505b6004547ea18f0343865824d1375c23f5dd79fdf32a12f50400ef2591e52276f8378e3190600160c01b90046001600160401b03168389848a6113c98b6402540be4006151c7565b60405180876001600160401b0316815260200180602001866001600160a01b03166001600160a01b03168152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019060200280838360005b8381101561144257818101518382015260200161142a565b5050505090500197505050505050505060405180910390a17f8740bbd4e1a2505bf2908481adbf1056fb52f762152b702f6c65468f63c55cf86004601881819054906101000a90046001600160401b03168092919060010191906101000a8154816001600160401b0302191690836001600160401b031602179055508e8e8c8c60405180866001600160401b0316815260200180602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f1916909201829003995090975050505050505050a15060019c9b505050505050505050505050565b600881565b662386f26fc1000081565b604080516337d7f9c160e21b81526001600160401b0384166004820152905160009184916110039163df5fe704916024808301926020929190829003018186803b1580156115b057600080fd5b505afa1580156115c4573d6000803e3d6000fd5b505050506040513d60208110156115da57600080fd5b50516116175760405162461bcd60e51b8152600401808060200182810382526023815260200180615b066023913960400191505060405180910390fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b15801561165657600080fd5b505afa15801561166a573d6000803e3d6000fd5b505050506040513d602081101561168057600080fd5b50516116d3576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b6004546001600160401b0384811691161461172b576040805162461bcd60e51b815260206004820152601360248201527277726f6e672062696e642073657175656e636560681b604482015290519081900360640190fd5b609d8714611780576040805162461bcd60e51b815260206004820152601760248201527f77726f6e672062696e64207061636b6167652073697a65000000000000000000604482015290519081900360640190fd5b6040805163cba510a960e01b81526001600160401b038616600482015290516000916110039163cba510a991602480820192602092909190829003018186803b1580156117cc57600080fd5b505afa1580156117e0573d6000803e3d6000fd5b505050506040513d60208110156117f657600080fd5b505160408051808201909152600381526269626360e81b60208201526004549192506118b491839190611833906001600160401b031660016152a5565b8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506152ec92505050565b6118fc576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b6004805467ffffffffffffffff19811660016001600160401b0392831601821617825560408051631bb5062960e31b81529188169282019290925290516000916110039163dda8314891602480820192602092909190829003018186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d602081101561199057600080fd5b5051905061199c61575d565b6119db8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506153e792505050565b60c08101516040805163205a3f0d60e11b81526001600160a01b03861660048201523360248201529051929350611005926340b47e1a929160448082019260209290919082900301818588803b158015611a3457600080fd5b505af1158015611a48573d6000803e3d6000fd5b50505050506040513d6020811015611a5f57600080fd5b50508051600090815260208181526040918290208351808255848301516001830180546001600160a01b039092166001600160a01b0319909216821790558486015160028401819055606080880151600386018190556080808a015160048801805460a08d01516001600160401b03166101000268ffffffffffffffff001960ff90941660ff19909216919091179290921691909117905560c08a0151600590970196909655875193845295830193909352818601529081019290925291517ff8608cf3c27350e6aa0beaa6723ea6911e3d7353e8b22a69bb112c15f93867ca929181900390910190a1600194505050505b509695505050505050565b61100181565b600454600160801b90046001600160401b031681565b600554600160401b90046001600160401b031681565b6003602052600090815260409020546001600160a01b031681565b600080611bb583615036565b9050611bbf61575d565b5060008181526020818152604091829020825160e081018452815480825260018301546001600160a01b03169382019390935260028201549381019390935260038101546060840152600481015460ff8116608085015261010090046001600160401b031660a08401526005015460c0830152611c80576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b6000611c9d8260600151836040015161545490919063ffffffff16565b905081602001516001600160a01b0316866001600160a01b031614611cf35760405162461bcd60e51b81526004018080602001828103825260458152602001806158986045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3657600080fd5b505afa158015611d4a573d6000803e3d6000fd5b505050506040513d6020811015611d6057600080fd5b50516001600160a01b031614611da75760405162461bcd60e51b815260040180806020018281038252602e8152602001806159f9602e913960400191505060405180910390fd5b60408051636eb1769f60e11b8152336004820152306024820152905182916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015611df657600080fd5b505afa158015611e0a573d6000803e3d6000fd5b505050506040513d6020811015611e2057600080fd5b505114611e5e5760405162461bcd60e51b8152600401808060200182810382526036815260200180615a686036913960400191505060405180910390fd5b428260a001516001600160401b03161015611f42576005805467ffffffffffffffff19811660016001600160401b03928316908101909216179091556020838101518451604080519485526001600160a01b039092169284019290925282810191909152517f4781c2d0a33124fb32083581f5b48c93a59b71fd567ce2d4a56c89196baa2ccd916060908290030190a1505060009081526020819052604081208181556001810180546001600160a01b0319169055600281018290556003810182905560048101805468ffffffffffffffffff191690556005018190559050612443565b6000866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611f7d57600080fd5b505afa158015611f91573d6000803e3d6000fd5b505050506040513d6020811015611fa757600080fd5b5051604080516395d89b4160e01b815290519192506060916001600160a01b038a16916395d89b41916004808301926000929190829003018186803b158015611fef57600080fd5b505afa158015612003573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561202c57600080fd5b8101908080516040519392919084600160201b82111561204b57600080fd5b90830190602082018581111561206057600080fd5b8251600160201b81118282018810171561207957600080fd5b82525081516020918201929091019080838360005b838110156120a657818101518382015260200161208e565b50505050905090810190601f1680156120d35780820380516001836020036101000a031916815260200191505b5060405250505090506120e6818661503d565b158061210a575083516000908152600360205260409020546001600160a01b031615155b8061213157506020808501516001600160a01b031660009081526001909152604090205415155b806121a85750836040015184602001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561217957600080fd5b505afa15801561218d573d6000803e3d6000fd5b505050506040513d60208110156121a357600080fd5b505114155b806121ba5750836080015160ff168214155b1561228e57600085815260208181526040808320838155600180820180546001600160a01b0319169055600282018590556003820185905560048201805468ffffffffffffffffff1916905560059182019490945580546001600160401b038181169586011667ffffffffffffffff1990911617905586820151875182519485526001600160a01b03919091169284019290925282810191909152517f2117f993c9cc877c531b4e6bd55d822cb48b529fd003c80e5bd6c27b7c1c17029181900360600190a1600095505050505050612443565b604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b038a16916323b872dd9160648083019260209291908290030181600087803b1580156122e357600080fd5b505af11580156122f7573d6000803e3d6000fd5b505050506040513d602081101561230d57600080fd5b50508351602085810180516001600160a01b03908116600090815260018085526040808320969096556080808b0151855185168452600280885288852060ff90921690915585518c518552600380895289862080549288166001600160a01b03199384161790558e8652858952898620868155808601805490931690925591810185905590810184905560048101805468ffffffffffffffffff1916905560059081019390935582546001600160401b038181169384011667ffffffffffffffff199091161790925592518951868b01516060808d01518951978852939095169686019690965284870152918301939093529181019190915260a0810184905290517f8005b9354dd0ca4c5593805bcd00ea12b5fce8a2cc9bc15252f50fb2d17c09d29181900360c00190a16001955050505050505b92915050565b600381565b61100581565b600181565b6005546001600160401b031681565b600581565b60008061247983615036565b905061248361575d565b5060008181526020818152604091829020825160e081018452815480825260018301546001600160a01b03169382019390935260028201549381019390935260038101546060840152600481015460ff8116608085015261010090046001600160401b031660a08401526005015460c0830152612544576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160a001516001600160401b0316106125a5576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600082815260208181526040808320838155600180820180546001600160a01b0319169055600282018590556003820185905560048201805468ffffffffffffffffff1916905560059182019490945580546001600160401b038181169586011667ffffffffffffffff1990911617905583820151845182519485526001600160a01b03919091169284019290925282810191909152517f4781c2d0a33124fb32083581f5b48c93a59b71fd567ce2d4a56c89196baa2ccd9181900360600190a15060019392505050565b66b1a2bc2ec5000081565b60008061268783615036565b905061269161575d565b5060008181526020818152604091829020825160e081018452815480825260018301546001600160a01b03169382019390935260028201549381019390935260038101546060840152600481015460ff8116608085015261010090046001600160401b031660a08401526005015460c0830152612752576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80602001516001600160a01b0316856001600160a01b0316146127a65760405162461bcd60e51b81526004018080602001828103825260458152602001806158986045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156127e957600080fd5b505afa1580156127fd573d6000803e3d6000fd5b505050506040513d602081101561281357600080fd5b50516001600160a01b031614612870576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703265206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600082815260208181526040808320838155600180820180546001600160a01b0319169055600282018590556003820185905560048201805468ffffffffffffffffff1916905560059182019490945580546001600160401b038181169586011667ffffffffffffffff1990911617905583820151845182519485526001600160a01b03919091169284019290925282810191909152517f341e20b0b6b62cb3990e2d1f8bcb0a15e7d7fd446355a7be807face1622852549181900360600190a1506001949350505050565b60026020526000908152604090205481565b604080516337d7f9c160e21b81526001600160401b0384166004820152905160009184916110039163df5fe704916024808301926020929190829003018186803b15801561299b57600080fd5b505afa1580156129af573d6000803e3d6000fd5b505050506040513d60208110156129c557600080fd5b5051612a025760405162461bcd60e51b8152600401808060200182810382526023815260200180615b066023913960400191505060405180910390fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b158015612a4157600080fd5b505afa158015612a55573d6000803e3d6000fd5b505050506040513d6020811015612a6b57600080fd5b5051612abe576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b6004546001600160401b03848116600160401b9092041614612b27576040805162461bcd60e51b815260206004820152601760248201527f77726f6e67207472616e736665722073657175656e6365000000000000000000604482015290519081900360640190fd5b60a48714612b7c576040805162461bcd60e51b815260206004820152601b60248201527f77726f6e67207472616e73666572207061636b6167652073697a650000000000604482015290519081900360640190fd5b6040805163cba510a960e01b81526001600160401b038616600482015290516000916110039163cba510a991602480820192602092909190829003018186803b158015612bc857600080fd5b505afa158015612bdc573d6000803e3d6000fd5b505050506040513d6020811015612bf257600080fd5b505160408051808201909152600381526269626360e81b6020820152600454919250612c369183919061183390600160401b90046001600160401b031660026152a5565b612c7e576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b6004805467ffffffffffffffff60401b198116600160401b918290046001600160401b03908116600101811690920217825560408051631bb5062960e31b81529188169282019290925290516000916110039163dda8314891602480820192602092909190829003018186803b158015612cf757600080fd5b505afa158015612d0b573d6000803e3d6000fd5b505050506040513d6020811015612d2157600080fd5b50519050612d2d61575d565b612d6c8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061549692505050565b60c08101516040805163205a3f0d60e11b81526001600160a01b03861660048201523360248201529051929350611005926340b47e1a929160448082019260209290919082900301818588803b158015612dc557600080fd5b505af1158015612dd9573d6000803e3d6000fd5b50505050506040513d6020811015612df057600080fd5b505060208101516001600160a01b0316158015612e13575080516221272160e91b145b15613175578060a001516001600160401b0316421115612efb576005805460016001600160401b03600160401b808404821692830182160267ffffffffffffffff60401b19909316929092179092556040838101516060808601516080808801516020808a01518a5160a0808d01518a519c8d526001600160a01b03998a16948d01949094529588168b8a01526402540be400909304958a0195909552949093169087015285015290911660c0830152517f8090e98e190cb0b05412d5c1a8cd5ee9af5d40da935335cef5d4179c7da63d799160e0908290030190a160009450505050611b51565b8060800151471015612fda576005805467ffffffffffffffff60401b198116600160401b918290046001600160401b0390811660018101909116909202179091556040820151606083015160808401517f1de400dfa3e72ba83f12c6f1d8b9b85dc3d2aedc6eacc27b481267826aec7422939291906402540be400906020808801518851604080516001600160401b0390991689526001600160a01b0397881693890193909352948616878301529290910460608601529216608084015260a08301524760c0830152519081900360e00190a160009450505050611b51565b80606001516001600160a01b03166108fc82608001519081150290604051600060405180830381858888f193505050506130c9576005805467ffffffffffffffff60401b198116600160401b918290046001600160401b039081166001810190911690920217909155604082015160608301516080840151600080516020615858833981519152939291906402540be400906020808801518851604080516001600160401b0390991689526001600160a01b0397881693890193909352948616878301529290910460608601529216608084015260a0830152519081900360c00190a160009450505050611b51565b7f8b8816b9cf4590950a140d102435e65bcce6ee7c84bb38367dd2bb71b8ae4ad26001600460089054906101000a90046001600160401b03160382606001518360800151846020015160405180856001600160401b03168152602001846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b0316815260200194505050505060405180910390a160019450505050611b51565b60808101516020808301516001600160a01b031660009081526002909152604081205490916131a391614aa5565b82516020808501516001600160a01b03166000908152600190915260409020549192501461327f576005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b1990921691909117909155604080840151606080860151602080880151885186519788526001600160a01b03958616928801929092529184168686015291850186905291909116608084015260a0830152517f055f2adbd109a4e99b3821af55571cccb4981551d10e3846b21574d348572a599181900360c00190a16000955050505050611b51565b8160a001516001600160401b0316421115613353576005805460016001600160401b03600160401b808404821692830182160267ffffffffffffffff60401b1990931692909217909255604080850151606080870151602080890151895160a0808c015188519a8b526001600160a01b03978816948b01949094529386168988015293880189905293909316608087015285015290911660c0830152517f8090e98e190cb0b05412d5c1a8cd5ee9af5d40da935335cef5d4179c7da63d799181900360e00190a16000955050505050611b51565b81602001516001600160a01b031663a9059cbb61c350846060015185608001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b1580156133c257600080fd5b5087f1935050505080156133e857506040513d60208110156133e357600080fd5b505160015b613714576040516000815260443d10156134045750600061349f565b60046000803e60005160e01c6308c379a0811461342557600091505061349f565b60043d036004833e81513d60248201116001600160401b03821117156134505760009250505061349f565b80830180516001600160401b0381111561347157600094505050505061349f565b8060208301013d860181111561348f5760009550505050505061349f565b601f01601f191660405250925050505b806134aa57506135f2565b6005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b1990921691909117909155604080850151606080870151602080890151895186519788526001600160a01b03958616928801929092529184168686015291850187905291909116608084015260a0830152516000805160206158588339815191529181900360c00190a160008051602061580383398151915283602001518260405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156135a9578181015183820152602001613591565b50505050905090810190601f1680156135d65780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1600096505050505050611b51565b3d80801561361c576040519150601f19603f3d011682016040523d82523d6000602084013e613621565b606091505b506005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b1990921691909117909155604080850151606080870151602080890151895186519788526001600160a01b03958616928801929092529184168686015291850187905291909116608084015260a0830152516000805160206158588339815191529181900360c00190a1602080840151604080516001600160a01b03831681528084018281528551928201929092528451600080516020615878833981519152948693916060840191850190808383600083156135a9578181015183820152602001613591565b80156137c8577f8b8816b9cf4590950a140d102435e65bcce6ee7c84bb38367dd2bb71b8ae4ad26001600460089054906101000a90046001600160401b03160384606001518560800151866020015160405180856001600160401b03168152602001846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b0316815260200194505050505060405180910390a1600196505050505050611b51565b602080840151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a082319261c350926024808201939291829003018187803b15801561381657600080fd5b5086fa9350505050801561383c57506040513d602081101561383757600080fd5b505160015b613b69576040516000815260443d1015613858575060006138f3565b60046000803e60005160e01c6308c379a081146138795760009150506138f3565b60043d036004833e81513d60248201116001600160401b03821117156138a4576000925050506138f3565b80830180516001600160401b038111156138c55760009450505050506138f3565b8060208301013d86018111156138e3576000955050505050506138f3565b601f01601f191660405250925050505b806138fe5750613a47565b6005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b19909216919091179091556040808601516060808801516020808a01518a5186519788526001600160a01b03958616928801929092529184168686015291850188905291909116608084015260a0830152516000805160206158588339815191529181900360c00190a160008051602061580383398151915284602001518260405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139fd5781810151838201526020016139e5565b50505050905090810190601f168015613a2a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a160009750505050505050611b51565b3d808015613a71576040519150601f19603f3d011682016040523d82523d6000602084013e613a76565b606091505b506005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b19909216919091179091556040808601516060808801516020808a01518a5186519788526001600160a01b03958616928801929092529184168686015291850188905291909116608084015260a0830152516000805160206158588339815191529181900360c00190a1602080850151604080516001600160a01b03831681528084018281528551928201929092528451600080516020615878833981519152948693916060840191850190808383600083156139fd5781810151838201526020016139e5565b6005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b19909216919091179091556040808601516060808801516020808a01518a5186519788526001600160a01b03958616928801929092529184168686015291850188905291909116608084015260a083015260c08201839052517f1de400dfa3e72ba83f12c6f1d8b9b85dc3d2aedc6eacc27b481267826aec74229181900360e00190a160009750505050505050611b51565b60016020526000908152604090205481565b677ce66c50e284000081565b61100781565b61100681565b61c35081565b6221272160e91b81565b600454600160c01b90046001600160401b031681565b61100281565b600281565b604080516337d7f9c160e21b81526001600160401b0384166004820152905160009184916110039163df5fe704916024808301926020929190829003018186803b158015613cce57600080fd5b505afa158015613ce2573d6000803e3d6000fd5b505050506040513d6020811015613cf857600080fd5b5051613d355760405162461bcd60e51b8152600401808060200182810382526023815260200180615b066023913960400191505060405180910390fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b158015613d7457600080fd5b505afa158015613d88573d6000803e3d6000fd5b505050506040513d6020811015613d9e57600080fd5b5051613df1576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b6004546001600160401b03848116600160801b9092041614613e52576040805162461bcd60e51b815260206004820152601560248201527477726f6e6720726566756e642073657175656e636560581b604482015290519081900360640190fd5b604a8714613ea7576040805162461bcd60e51b815260206004820152601960248201527f77726f6e6720726566756e64207061636b6167652073697a6500000000000000604482015290519081900360640190fd5b6040805163cba510a960e01b81526001600160401b038616600482015290516000916110039163cba510a991602480820192602092909190829003018186803b158015613ef357600080fd5b505afa158015613f07573d6000803e3d6000fd5b505050506040513d6020811015613f1d57600080fd5b50516040805180820190915260038082526269626360e81b6020830152600454929350613f619284929161183391600160801b90046001600160401b0316906152a5565b613fa9576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b6004805467ffffffffffffffff60801b198116600160801b918290046001600160401b03908116600101811690920217825560408051631bb5062960e31b81529188169282019290925290516000916110039163dda8314891602480820192602092909190829003018186803b15801561402257600080fd5b505afa158015614036573d6000803e3d6000fd5b505050506040513d602081101561404c57600080fd5b50519050600061407b600561406f662386f26fc10000600163ffffffff61550816565b9063ffffffff6151c716565b604080516309a99b4f60e41b81526001600160a01b038516600482015260248101839052905191925061100291639a99b4f09160448082019260009290919082900301818387803b1580156140cf57600080fd5b505af11580156140e3573d6000803e3d6000fd5b5050505061410181662386f26fc1000061545490919063ffffffff16565b604080516309a99b4f60e41b815233600482015260248101839052905191925061100291639a99b4f09160448082019260009290919082900301818387803b15801561414c57600080fd5b505af1158015614160573d6000803e3d6000fd5b5050505061416c615799565b6141ab8c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061556192505050565b60208101519091506001600160a01b0316614354578051479081101561424957602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092526080810183905290517f3c4b6baf924ba2c954f9d76392ea4a866fda4b545684f54badbb5ab67c59f2779181900360a00190a1600096505050505050611b51565b604080830151835191516001600160a01b039091169180156108fc02916000818181858888f193505050506142dd57602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a488339815191529181900360800190a1600096505050505050611b51565b602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff169282019290925290517f5d287c29bf23b5f4c450d5e83e5ca51c1f8225afb6f253e9d2ca107893b2a7e49181900360800190a1600196505050505050611b51565b6020808201516001600160a01b03166000908152600190915260409020546143ec57602080820151604080840151845160608087015184516001600160a01b03968716815295909316958501959095528383015261ffff169282019290925290517fc9f4828eed39b4d08b0bcc16c824d67db7f30fdb36aa5572912134742f623f999181900360800190a16000955050505050611b51565b80602001516001600160a01b031663a9059cbb61c350836040015184600001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561445b57600080fd5b5087f19350505050801561448157506040513d602081101561447c57600080fd5b505160015b6146db576040516000815260443d101561449d57506000614538565b60046000803e60005160e01c6308c379a081146144be576000915050614538565b60043d036004833e81513d60248201116001600160401b03821117156144e957600092505050614538565b80830180516001600160401b0381111561450a576000945050505050614538565b8060208301013d860181111561452857600095505050505050614538565b601f01601f191660405250925050505b8061454357506145f7565b602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a488339815191529181900360800190a1602080830151604080516001600160a01b03831681528084018281528551928201929092528451600080516020615803833981519152948693916060840191850190808383600083156135a9578181015183820152602001613591565b3d808015614621576040519150601f19603f3d011682016040523d82523d6000602084013e614626565b606091505b50602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a488339815191529181900360800190a1602080830151604080516001600160a01b03831681528084018281528551928201929092528451600080516020615878833981519152948693916060840191850190808383600083156135a9578181015183820152602001613591565b801561475857602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff169282019290925290517f5d287c29bf23b5f4c450d5e83e5ca51c1f8225afb6f253e9d2ca107893b2a7e49181900360800190a1600196505050505050611b51565b602080830151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a082319261c350926024808201939291829003018187803b1580156147a657600080fd5b5086fa935050505080156147cc57506040513d60208110156147c757600080fd5b505160015b614a26576040516000815260443d10156147e857506000614883565b60046000803e60005160e01c6308c379a08114614809576000915050614883565b60043d036004833e81513d60248201116001600160401b038211171561483457600092505050614883565b80830180516001600160401b03811115614855576000945050505050614883565b8060208301013d860181111561487357600095505050505050614883565b601f01601f191660405250925050505b8061488e5750614942565b602080840151604080860151865160608089015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a488339815191529181900360800190a1602080840151604080516001600160a01b03831681528084018281528551928201929092528451600080516020615803833981519152948693916060840191850190808383600083156139fd5781810151838201526020016139e5565b3d80801561496c576040519150601f19603f3d011682016040523d82523d6000602084013e614971565b606091505b50602080840151604080860151865160608089015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a488339815191529181900360800190a1602080840151604080516001600160a01b03831681528084018281528551928201929092528451600080516020615878833981519152948693916060840191850190808383600083156139fd5781810151838201526020016139e5565b602080840151604080860151865160608089015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092526080810183905290517f3c4b6baf924ba2c954f9d76392ea4a866fda4b545684f54badbb5ab67c59f2779181900360a00190a160009750505050505050611b51565b60006008821115614ace57614ac7836007198401600a0a63ffffffff6151c716565b9050612443565b614ae5836008849003600a0a63ffffffff61550816565b9392505050565b60006402540be400820615614b48576040805162461bcd60e51b815260206004820152601a60248201527f72656c6179466565206973206d757374206265204e2a31653130000000000000604482015290519081900360640190fd5b662386f26fc10000821015614b9d576040805162461bcd60e51b815260206004820152601660248201527572656c617946656520697320746f6f206c6974746c6560501b604482015290519081900360640190fd5b42607801831015614bdf5760405162461bcd60e51b81526004018080602001828103825260248152602001806157df6024913960400191505060405180910390fd5b6000614bf6836402540be40063ffffffff6151c716565b90506000806001600160a01b038916614cbf576402540be400870615614c4d5760405162461bcd60e51b815260040180806020018281038252603c8152602001806159bd603c913960400191505060405180910390fd5b614c5d878663ffffffff61520916565b3414614c9a5760405162461bcd60e51b815260040180806020018281038252604c8152602001806158dd604c913960600191505060405180910390fd5b614caf876402540be40063ffffffff6151c716565b6221272160e91b92509050614f0b565b6001600160a01b038916600090815260016020526040902054915081614d165760405162461bcd60e51b815260040180806020018281038252603081526020018061598d6030913960400191505060405180910390fd5b843414614d545760405162461bcd60e51b815260040180806020018281038252602d815260200180615ad9602d913960400191505060405180910390fd5b6001600160a01b038916600090815260026020526040902054600881111580614d9c5750600881118015614d9c5750614d9a886007198301600a0a63ffffffff61526316565b155b614dd75760405162461bcd60e51b815260040180806020018281038252603c8152602001806159bd603c913960400191505060405180910390fd5b614de18882614aa5565b9150600881101580614dfd5750600881108015614dfd57508782115b614e385760405162461bcd60e51b81526004018080602001828103825260258152602001806159296025913960400191505060405180910390fd5b677ce66c50e2840000821115614e7f5760405162461bcd60e51b81526004018080602001828103825260358152602001806158236035913960400191505060405180910390fd5b604080516323b872dd60e01b8152336004820152306024820152604481018a905290516001600160a01b038c16916323b872dd9160648083019260209291908290030181600087803b158015614ed457600080fd5b505af1158015614ee8573d6000803e3d6000fd5b505050506040513d6020811015614efe57600080fd5b5051614f0957600080fd5b505b6004805460016001600160401b03600160c01b8084048216928301909116026001600160c01b0390921691909117909155604080519182523360208301526001600160a01b03808b1683830152606083018490528b16608083015260a0820184905260c0820188905260e08201859052517f5bd451c53ab05abd9855ceb52a469590655af1d732a4cfd67f1f9b53d74dc613918190036101000190a1600193505050505b95945050505050565b6004546001600160401b031681565b600454600160401b90046001600160401b031681565b61100381565b60006020819052908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b03909316939192909160ff82169161010090046001600160401b03169087565b6020015190565b8151600090839060081080615053575080516003115b15615062576000915050612443565b60005b81518110156150f75781818151811061507a57fe5b016020015160f81c6061118015906150a65750607a82828151811061509b57fe5b016020015160f81c11155b156150ef5760208282815181106150b957fe5b602001015160f81c60f81b60f81c0360f81b8282815181106150d757fe5b60200101906001600160f81b031916908160001a9053505b600101615065565b506040805160208082528183019092526060916020820181803683370190505090508360208201528082518151811061512c57fe5b6020910101516001600160f81b031916602d60f81b1461515157600092505050612443565b600160005b83518110156151b15782818151811061516b57fe5b602001015160f81c60f81b6001600160f81b03191684828151811061518c57fe5b01602001516001600160f81b031916146151a957600091506151b1565b600101615156565b5095945050505050565b61100081565b61100481565b6000614ae583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506155ae565b600082820183811015614ae5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000614ae583836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615650565b60408051600e808252818301909252606091630100020060ff851617918391602082018180368337505050600e818101969096526006810192909252509283525090919050565b6000856152fb57506000614faf565b606082518451865160800101016040519080825280601f01601f191660200182016040528015615332576020820181803683370190505b5090506000615340826156b2565b602080890151825201905086600080615358896156b8565b80865260209095019490925090506153718285836156c2565b9283019261537e886156b8565b80865260209095019490925090506153978285836156c2565b9283018a8152602001926153aa876156b8565b90925090506153ba8285836156c2565b5083516020016153c86157c0565b60208183886065600019fa50516001149b9a5050505050505050505050565b6153ef61575d565b6153f761575d565b602083810151825260348401516001600160a01b0316908201526054830151604082015260748301516060820152607583015160ff166080820152607d8301516001600160401b031660a0820152609d9092015160c08301525090565b6000614ae583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615703565b61549e61575d565b6154a661575d565b602083810151825260348401516001600160a01b0390811691830191909152604884015181166040830152605c840151166060820152607c830151608082015260848301516001600160401b031660a082015260a49092015160c08301525090565b60008261551757506000612443565b8282028284828161552457fe5b0414614ae55760405162461bcd60e51b8152600401808060200182810382526021815260200180615a276021913960400191505060405180910390fd5b615569615799565b615571615799565b602083810151825260348401516001600160a01b03908116918301919091526048840151166040820152604a9092015161ffff1660608301525090565b6000818361563a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156155ff5781810151838201526020016155e7565b50505050905090810190601f16801561562c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161564657fe5b0495945050505050565b6000818361569f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156155ff5781810151838201526020016155e7565b508284816156a957fe5b06949350505050565b60200190565b8051602090910191565b5b602081106156e2578251825260209283019290910190601f19016156c3565b915181516020939093036101000a6000190180199091169216919091179052565b600081848411156157555760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156155ff5781810151838201526020016155e7565b505050900390565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040518060200160405280600190602082028036833750919291505056fe65787069726554696d65206d7573742062652074776f206d696e75746573206c617465726b12c383d2683ef480c42ffdc69b5e1b142f2d9e63993c4ba14789d43b9f4999616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e74cb6ddd4a252f58c1ff32f31fbb529dc35e8f6a81908f6211bbe7dfa94ef52f1f31a48d93e6850d386f670b9e376328798aa76e04eccb473f292a73cfd4955edb636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e642072657175657374726563656976656420424e4220616d6f756e7420646f65736e277420657175616c20746f207468652073756d206f66207472616e7366657220616d6f756e7420616e642072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e64416464727374686520636f6e747261637420686173206e6f74206265656e2062696e6420746f20616e79206265703220746f6b656e696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e6f6e6c79206265703265206f776e65722063616e20617070726f766520746869732062696e642072657175657374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7721ecc19fbf4244dbd58a78f83d525251163700dfdeec195b4e0ab98127ad790c616c6c6f77616e636520646f65736e277420657175616c20746f2028746f74616c537570706c79202d207065676779416d6f756e74294c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473726563656976656420424e4220616d6f756e7420646f65736e277420657175616c20746f2072656c61794665656c6967687420636c69656e74206e6f742073796e632074686520626c6f636b20796574a2646970667358221220c95ef8e6031bfb37279b5ac9114fac5cf5bc516129559323bd13cda96b21c95164736f6c63430006040033" + "code": "0x60806040526004361061025c5760003560e01c80639a854bbd11610144578063d398809b116100b6578063dc927faf1161007a578063dc927faf14610b8f578063df01411914610ba4578063e106363514610c1a578063f5d3151914610ccb578063f9a2bbc714610d7e578063fd6a687914610d935761025c565b8063d398809b14610af3578063d43b8c5b14610b23578063d891ccb214610b65578063dac3f64f14610b7a578063dc6f5e90146106285761025c565b8063b9fd21e311610108578063b9fd21e3146109ae578063bd038949146109c3578063c3dc4d9a146109d8578063c81b1662146109ed578063cc12eabc14610a02578063ccb27f6a14610a175761025c565b80639a854bbd1461095a5780639dc092621461096f578063a1a11bf514610984578063aae2768c146103c3578063b7701861146109995761025c565b80636bc2ecdb116101dd57806372c4e086116101a157806372c4e0861461069157806375405d0d1461074257806377d9dae8146107575780637f6a7a9e14610818578063964c0dcd1461084b5780639710e7f6146109275761025c565b80636bc2ecdb146106285780636e47b4821461063d5780636fd31f8114610652578063716c9dd5146106675780637194c9671461067c5761025c565b80634e4a70e6116102245780634e4a70e6146104f75780635da9b1f214610528578063613684751461039857806366be79451461053d5780636b3f1307146105675761025c565b8063053799cf14610261578063077b8f351461039857806314e68d82146103c35780632eb881b0146103ea57806343756e5c146104c6575b600080fd5b610384600480360360c081101561027757600080fd5b810190602081018135600160201b81111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460208302840111600160201b831117156102c457600080fd5b919390929091602081019035600160201b8111156102e157600080fd5b8201836020820111156102f357600080fd5b803590602001918460208302840111600160201b8311171561031457600080fd5b919390929091602081019035600160201b81111561033157600080fd5b82018360208201111561034357600080fd5b803590602001918460208302840111600160201b8311171561036457600080fd5b91935091506001600160a01b038135169060208101359060400135610da8565b604080519115158252519081900360200190f35b3480156103a457600080fd5b506103ad611553565b6040805160ff9092168252519081900360200190f35b3480156103cf57600080fd5b506103d8611558565b60408051918252519081900360200190f35b3480156103f657600080fd5b506103846004803603608081101561040d57600080fd5b810190602081018135600160201b81111561042757600080fd5b82018360208201111561043957600080fd5b803590602001918460018302840111600160201b8311171561045a57600080fd5b919390929091602081019035600160201b81111561047757600080fd5b82018360208201111561048957600080fd5b803590602001918460018302840111600160201b831117156104aa57600080fd5b91935091506001600160401b0381358116916020013516611563565b3480156104d257600080fd5b506104db611b65565b604080516001600160a01b039092168252519081900360200190f35b34801561050357600080fd5b5061050c611b6b565b604080516001600160401b039092168252519081900360200190f35b34801561053457600080fd5b5061050c611b81565b34801561054957600080fd5b506104db6004803603602081101561056057600080fd5b5035611b97565b34801561057357600080fd5b506103846004803603604081101561058a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105b457600080fd5b8201836020820111156105c657600080fd5b803590602001918460018302840111600160201b831117156105e757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611bb2945050505050565b34801561063457600080fd5b506103ad612452565b34801561064957600080fd5b506104db612457565b34801561065e57600080fd5b506103d861245d565b34801561067357600080fd5b5061050c612462565b34801561068857600080fd5b506103d8612471565b34801561069d57600080fd5b50610384600480360360208110156106b457600080fd5b810190602081018135600160201b8111156106ce57600080fd5b8201836020820111156106e057600080fd5b803590602001918460018302840111600160201b8311171561070157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612476945050505050565b34801561074e57600080fd5b506103d8612679565b34801561076357600080fd5b506103846004803603604081101561077a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107a457600080fd5b8201836020820111156107b657600080fd5b803590602001918460018302840111600160201b831117156107d757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612684945050505050565b34801561082457600080fd5b506103d86004803603602081101561083b57600080fd5b50356001600160a01b0316612945565b34801561085757600080fd5b506103846004803603608081101561086e57600080fd5b810190602081018135600160201b81111561088857600080fd5b82018360208201111561089a57600080fd5b803590602001918460018302840111600160201b831117156108bb57600080fd5b919390929091602081019035600160201b8111156108d857600080fd5b8201836020820111156108ea57600080fd5b803590602001918460018302840111600160201b8311171561090b57600080fd5b91935091506001600160401b0381358116916020013516612957565b34801561093357600080fd5b506103d86004803603602081101561094a57600080fd5b50356001600160a01b0316613c2c565b34801561096657600080fd5b506103d8613c3e565b34801561097b57600080fd5b506104db613c4a565b34801561099057600080fd5b506104db613c50565b3480156109a557600080fd5b506103d8613c56565b3480156109ba57600080fd5b506103d8613c5c565b3480156109cf57600080fd5b5061050c613c66565b3480156109e457600080fd5b506103ad61245d565b3480156109f957600080fd5b506104db613c7c565b348015610a0e57600080fd5b506103ad613c82565b348015610a2357600080fd5b5061038460048036036080811015610a3a57600080fd5b810190602081018135600160201b811115610a5457600080fd5b820183602082011115610a6657600080fd5b803590602001918460018302840111600160201b83111715610a8757600080fd5b919390929091602081019035600160201b811115610aa457600080fd5b820183602082011115610ab657600080fd5b803590602001918460018302840111600160201b83111715610ad757600080fd5b91935091506001600160401b0381358116916020013516613c87565b348015610aff57600080fd5b506103d860048036036040811015610b1657600080fd5b5080359060200135614ab0565b610384600480360360a0811015610b3957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135614af7565b348015610b7157600080fd5b5061050c614fc3565b348015610b8657600080fd5b5061050c614fd2565b348015610b9b57600080fd5b506104db614fe8565b348015610bb057600080fd5b50610bce60048036036020811015610bc757600080fd5b5035614fee565b604080519788526001600160a01b03909616602088015286860194909452606086019290925260ff1660808501526001600160401b031660a084015260c0830152519081900360e00190f35b348015610c2657600080fd5b506103d860048036036020811015610c3d57600080fd5b810190602081018135600160201b811115610c5757600080fd5b820183602082011115610c6957600080fd5b803590602001918460018302840111600160201b83111715610c8a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550615041945050505050565b348015610cd757600080fd5b5061038460048036036040811015610cee57600080fd5b810190602081018135600160201b811115610d0857600080fd5b820183602082011115610d1a57600080fd5b803590602001918460018302840111600160201b83111715610d3b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250615048915050565b348015610d8a57600080fd5b506104db6151c6565b348015610d9f57600080fd5b506104db6151cc565b6000888714610de85760405162461bcd60e51b815260040180806020018281038252603b815260200180615aa9603b913960400191505060405180910390fd5b888514610e265760405162461bcd60e51b815260040180806020018281038252603f815260200180615959603f913960400191505060405180910390fd5b662386f26fc10000610e3e838963ffffffff6151d216565b1015610e8a576040805162461bcd60e51b815260206004820152601660248201527572656c617946656520697320746f6f206c6974746c6560501b604482015290519081900360640190fd5b6402540be400820615610ee4576040805162461bcd60e51b815260206004820152601760248201527f72656c6179466565206d757374206265204e2a31653130000000000000000000604482015290519081900360640190fd5b42607801831015610f265760405162461bcd60e51b81526004018080602001828103825260248152602001806157ea6024913960400191505060405180910390fd5b6000805b88811015610f6157610f578a8a83818110610f4157fe5b905060200201358361521490919063ffffffff16565b9150600101610f2a565b50604080518981526020808b02820101909152606090898015610f8e578160200160208202803683370190505b50905060006001600160a01b0387166110cf5760005b60ff81168b1115611074576402540be4008c8c8360ff16818110610fc457fe5b9050602002013581610fd257fe5b0615611025576040805162461bcd60e51b815260206004820152601760248201527f696e76616c6964207472616e7366657220616d6f756e74000000000000000000604482015290519081900360640190fd5b6110526402540be4008d8d8460ff1681811061103d57fe5b905060200201356151d290919063ffffffff16565b838260ff168151811061106157fe5b6020908102919091010152600101610fa4565b50611085838663ffffffff61521416565b34146110c25760405162461bcd60e51b815260040180806020018281038252604c8152602001806158e8604c913960600191505060405180910390fd5b506221272160e91b611382565b6001600160a01b038716600090815260026020526040812054905b8b81101561126057600882111580611136575060088211801561113657506111346007198301600a0a8e8e8481811061111f57fe5b9050602002013561526e90919063ffffffff16565b155b6111715760405162461bcd60e51b815260040180806020018281038252603c8152602001806159c8603c913960400191505060405180910390fd5b600061118f8e8e8481811061118257fe5b9050602002013584614ab0565b90506008831015806111bd57506008831080156111bd57508d8d838181106111b357fe5b9050602002013581115b6111f85760405162461bcd60e51b81526004018080602001828103825260258152602001806159346025913960400191505060405180910390fd5b677ce66c50e284000081111561123f5760405162461bcd60e51b815260040180806020018281038252603581526020018061582e6035913960400191505060405180910390fd5b8085838151811061124c57fe5b6020908102919091010152506001016110ea565b506001600160a01b0388166000908152600160205260409020549150816112b85760405162461bcd60e51b81526004018080602001828103825260308152602001806159986030913960400191505060405180910390fd5b8534146112f65760405162461bcd60e51b815260040180806020018281038252602d815260200180615ae4602d913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038a16916323b872dd9160648083019260209291908290030181600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b505050506040513d602081101561137557600080fd5b505161138057600080fd5b505b6004547ea18f0343865824d1375c23f5dd79fdf32a12f50400ef2591e52276f8378e3190600160c01b90046001600160401b03168389848a6113c98b6402540be4006151d2565b60405180876001600160401b0316815260200180602001866001600160a01b03166001600160a01b03168152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019060200280838360005b8381101561144257818101518382015260200161142a565b5050505090500197505050505050505060405180910390a17f8740bbd4e1a2505bf2908481adbf1056fb52f762152b702f6c65468f63c55cf86004601881819054906101000a90046001600160401b03168092919060010191906101000a8154816001600160401b0302191690836001600160401b031602179055508e8e8c8c60405180866001600160401b0316815260200180602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f1916909201829003995090975050505050505050a15060019c9b505050505050505050505050565b600881565b662386f26fc1000081565b60045460009082906001600160401b0390811690821681146115c4576040805162461bcd60e51b815260206004820152601560248201527439b2b8bab2b731b2903737ba1034b71037b93232b960591b604482015290519081900360640190fd5b604080516337d7f9c160e21b81526001600160401b0387166004820152905186916110039163df5fe70491602480820192602092909190829003018186803b15801561160f57600080fd5b505afa158015611623573d6000803e3d6000fd5b505050506040513d602081101561163957600080fd5b50516116765760405162461bcd60e51b8152600401808060200182810382526023815260200180615b116023913960400191505060405180910390fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b1580156116b557600080fd5b505afa1580156116c9573d6000803e3d6000fd5b505050506040513d60208110156116df57600080fd5b5051611732576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b609d8914611787576040805162461bcd60e51b815260206004820152601760248201527f77726f6e672062696e64207061636b6167652073697a65000000000000000000604482015290519081900360640190fd5b6040805163cba510a960e01b81526001600160401b038816600482015290516000916110039163cba510a991602480820192602092909190829003018186803b1580156117d357600080fd5b505afa1580156117e7573d6000803e3d6000fd5b505050506040513d60208110156117fd57600080fd5b505160408051808201909152600381526269626360e81b60208201526004549192506118bb9183919061183a906001600160401b031660016152b0565b8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506152f792505050565b611903576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b6004805467ffffffffffffffff19811660016001600160401b0392831601821617825560408051631bb5062960e31b8152918a169282019290925290516000916110039163dda8314891602480820192602092909190829003018186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d602081101561199757600080fd5b505190506119a3615768565b6119e28d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506153f292505050565b60c08101516040805163205a3f0d60e11b81526001600160a01b03861660048201523360248201529051929350611005926340b47e1a929160448082019260209290919082900301818588803b158015611a3b57600080fd5b505af1158015611a4f573d6000803e3d6000fd5b50505050506040513d6020811015611a6657600080fd5b50508051600090815260208181526040918290208351808255848301516001830180546001600160a01b039092166001600160a01b0319909216821790558486015160028401819055606080880151600386018190556080808a015160048801805460a08d01516001600160401b03166101000268ffffffffffffffff001960ff90941660ff19909216919091179290921691909117905560c08a0151600590970196909655875193845295830193909352818601529081019290925291517ff8608cf3c27350e6aa0beaa6723ea6911e3d7353e8b22a69bb112c15f93867ca929181900390910190a1600196505050505b5050509695505050505050565b61100181565b600454600160801b90046001600160401b031681565b600554600160401b90046001600160401b031681565b6003602052600090815260409020546001600160a01b031681565b600080611bbe83615041565b9050611bc8615768565b5060008181526020818152604091829020825160e081018452815480825260018301546001600160a01b03169382019390935260028201549381019390935260038101546060840152600481015460ff8116608085015261010090046001600160401b031660a08401526005015460c0830152611c89576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b6000611ca68260600151836040015161545f90919063ffffffff16565b905081602001516001600160a01b0316866001600160a01b031614611cfc5760405162461bcd60e51b81526004018080602001828103825260458152602001806158a36045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3f57600080fd5b505afa158015611d53573d6000803e3d6000fd5b505050506040513d6020811015611d6957600080fd5b50516001600160a01b031614611db05760405162461bcd60e51b815260040180806020018281038252602e815260200180615a04602e913960400191505060405180910390fd5b60408051636eb1769f60e11b8152336004820152306024820152905182916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015611dff57600080fd5b505afa158015611e13573d6000803e3d6000fd5b505050506040513d6020811015611e2957600080fd5b505114611e675760405162461bcd60e51b8152600401808060200182810382526036815260200180615a736036913960400191505060405180910390fd5b428260a001516001600160401b03161015611f4b576005805467ffffffffffffffff19811660016001600160401b03928316908101909216179091556020838101518451604080519485526001600160a01b039092169284019290925282810191909152517f4781c2d0a33124fb32083581f5b48c93a59b71fd567ce2d4a56c89196baa2ccd916060908290030190a1505060009081526020819052604081208181556001810180546001600160a01b0319169055600281018290556003810182905560048101805468ffffffffffffffffff19169055600501819055905061244c565b6000866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8657600080fd5b505afa158015611f9a573d6000803e3d6000fd5b505050506040513d6020811015611fb057600080fd5b5051604080516395d89b4160e01b815290519192506060916001600160a01b038a16916395d89b41916004808301926000929190829003018186803b158015611ff857600080fd5b505afa15801561200c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561203557600080fd5b8101908080516040519392919084600160201b82111561205457600080fd5b90830190602082018581111561206957600080fd5b8251600160201b81118282018810171561208257600080fd5b82525081516020918201929091019080838360005b838110156120af578181015183820152602001612097565b50505050905090810190601f1680156120dc5780820380516001836020036101000a031916815260200191505b5060405250505090506120ef8186615048565b1580612113575083516000908152600360205260409020546001600160a01b031615155b8061213a57506020808501516001600160a01b031660009081526001909152604090205415155b806121b15750836040015184602001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561218257600080fd5b505afa158015612196573d6000803e3d6000fd5b505050506040513d60208110156121ac57600080fd5b505114155b806121c35750836080015160ff168214155b1561229757600085815260208181526040808320838155600180820180546001600160a01b0319169055600282018590556003820185905560048201805468ffffffffffffffffff1916905560059182019490945580546001600160401b038181169586011667ffffffffffffffff1990911617905586820151875182519485526001600160a01b03919091169284019290925282810191909152517f2117f993c9cc877c531b4e6bd55d822cb48b529fd003c80e5bd6c27b7c1c17029181900360600190a160009550505050505061244c565b604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b038a16916323b872dd9160648083019260209291908290030181600087803b1580156122ec57600080fd5b505af1158015612300573d6000803e3d6000fd5b505050506040513d602081101561231657600080fd5b50508351602085810180516001600160a01b03908116600090815260018085526040808320969096556080808b0151855185168452600280885288852060ff90921690915585518c518552600380895289862080549288166001600160a01b03199384161790558e8652858952898620868155808601805490931690925591810185905590810184905560048101805468ffffffffffffffffff1916905560059081019390935582546001600160401b038181169384011667ffffffffffffffff199091161790925592518951868b01516060808d01518951978852939095169686019690965284870152918301939093529181019190915260a0810184905290517f8005b9354dd0ca4c5593805bcd00ea12b5fce8a2cc9bc15252f50fb2d17c09d29181900360c00190a16001955050505050505b92915050565b600381565b61100581565b600181565b6005546001600160401b031681565b600581565b60008061248283615041565b905061248c615768565b5060008181526020818152604091829020825160e081018452815480825260018301546001600160a01b03169382019390935260028201549381019390935260038101546060840152600481015460ff8116608085015261010090046001600160401b031660a08401526005015460c083015261254d576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160a001516001600160401b0316106125ae576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600082815260208181526040808320838155600180820180546001600160a01b0319169055600282018590556003820185905560048201805468ffffffffffffffffff1916905560059182019490945580546001600160401b038181169586011667ffffffffffffffff1990911617905583820151845182519485526001600160a01b03919091169284019290925282810191909152517f4781c2d0a33124fb32083581f5b48c93a59b71fd567ce2d4a56c89196baa2ccd9181900360600190a15060019392505050565b66b1a2bc2ec5000081565b60008061269083615041565b905061269a615768565b5060008181526020818152604091829020825160e081018452815480825260018301546001600160a01b03169382019390935260028201549381019390935260038101546060840152600481015460ff8116608085015261010090046001600160401b031660a08401526005015460c083015261275b576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80602001516001600160a01b0316856001600160a01b0316146127af5760405162461bcd60e51b81526004018080602001828103825260458152602001806158a36045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156127f257600080fd5b505afa158015612806573d6000803e3d6000fd5b505050506040513d602081101561281c57600080fd5b50516001600160a01b031614612879576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703265206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600082815260208181526040808320838155600180820180546001600160a01b0319169055600282018590556003820185905560048201805468ffffffffffffffffff1916905560059182019490945580546001600160401b038181169586011667ffffffffffffffff1990911617905583820151845182519485526001600160a01b03919091169284019290925282810191909152517f341e20b0b6b62cb3990e2d1f8bcb0a15e7d7fd446355a7be807face1622852549181900360600190a1506001949350505050565b60026020526000908152604090205481565b60045460009082906001600160401b03600160401b909104811690821681146129bf576040805162461bcd60e51b815260206004820152601560248201527439b2b8bab2b731b2903737ba1034b71037b93232b960591b604482015290519081900360640190fd5b604080516337d7f9c160e21b81526001600160401b0387166004820152905186916110039163df5fe70491602480820192602092909190829003018186803b158015612a0a57600080fd5b505afa158015612a1e573d6000803e3d6000fd5b505050506040513d6020811015612a3457600080fd5b5051612a715760405162461bcd60e51b8152600401808060200182810382526023815260200180615b116023913960400191505060405180910390fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b158015612ab057600080fd5b505afa158015612ac4573d6000803e3d6000fd5b505050506040513d6020811015612ada57600080fd5b5051612b2d576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b60a48914612b82576040805162461bcd60e51b815260206004820152601b60248201527f77726f6e67207472616e73666572207061636b6167652073697a650000000000604482015290519081900360640190fd5b6040805163cba510a960e01b81526001600160401b038816600482015290516000916110039163cba510a991602480820192602092909190829003018186803b158015612bce57600080fd5b505afa158015612be2573d6000803e3d6000fd5b505050506040513d6020811015612bf857600080fd5b505160408051808201909152600381526269626360e81b6020820152600454919250612c3c9183919061183a90600160401b90046001600160401b031660026152b0565b612c84576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b6004805467ffffffffffffffff60401b198116600160401b918290046001600160401b03908116600101811690920217825560408051631bb5062960e31b8152918a169282019290925290516000916110039163dda8314891602480820192602092909190829003018186803b158015612cfd57600080fd5b505afa158015612d11573d6000803e3d6000fd5b505050506040513d6020811015612d2757600080fd5b50519050612d33615768565b612d728d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506154a192505050565b60c08101516040805163205a3f0d60e11b81526001600160a01b03861660048201523360248201529051929350611005926340b47e1a929160448082019260209290919082900301818588803b158015612dcb57600080fd5b505af1158015612ddf573d6000803e3d6000fd5b50505050506040513d6020811015612df657600080fd5b505060208101516001600160a01b0316158015612e19575080516221272160e91b145b1561317b578060a001516001600160401b0316421115612f01576005805460016001600160401b03600160401b808404821692830182160267ffffffffffffffff60401b19909316929092179092556040838101516060808601516080808801516020808a01518a5160a0808d01518a519c8d526001600160a01b03998a16948d01949094529588168b8a01526402540be400909304958a0195909552949093169087015285015290911660c0830152517f8090e98e190cb0b05412d5c1a8cd5ee9af5d40da935335cef5d4179c7da63d799160e0908290030190a160009650505050611b58565b8060800151471015612fe0576005805467ffffffffffffffff60401b198116600160401b918290046001600160401b0390811660018101909116909202179091556040820151606083015160808401517f1de400dfa3e72ba83f12c6f1d8b9b85dc3d2aedc6eacc27b481267826aec7422939291906402540be400906020808801518851604080516001600160401b0390991689526001600160a01b0397881693890193909352948616878301529290910460608601529216608084015260a08301524760c0830152519081900360e00190a160009650505050611b58565b80606001516001600160a01b03166108fc82608001519081150290604051600060405180830381858888f193505050506130cf576005805467ffffffffffffffff60401b198116600160401b918290046001600160401b039081166001810190911690920217909155604082015160608301516080840151600080516020615863833981519152939291906402540be400906020808801518851604080516001600160401b0390991689526001600160a01b0397881693890193909352948616878301529290910460608601529216608084015260a0830152519081900360c00190a160009650505050611b58565b7f8b8816b9cf4590950a140d102435e65bcce6ee7c84bb38367dd2bb71b8ae4ad26001600460089054906101000a90046001600160401b03160382606001518360800151846020015160405180856001600160401b03168152602001846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b0316815260200194505050505060405180910390a160019650505050611b58565b60808101516020808301516001600160a01b031660009081526002909152604081205490916131a991614ab0565b82516020808501516001600160a01b031660009081526001909152604090205491925014613285576005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b1990921691909117909155604080840151606080860151602080880151885186519788526001600160a01b03958616928801929092529184168686015291850186905291909116608084015260a0830152517f055f2adbd109a4e99b3821af55571cccb4981551d10e3846b21574d348572a599181900360c00190a16000975050505050611b58565b8160a001516001600160401b0316421115613359576005805460016001600160401b03600160401b808404821692830182160267ffffffffffffffff60401b1990931692909217909255604080850151606080870151602080890151895160a0808c015188519a8b526001600160a01b03978816948b01949094529386168988015293880189905293909316608087015285015290911660c0830152517f8090e98e190cb0b05412d5c1a8cd5ee9af5d40da935335cef5d4179c7da63d799181900360e00190a16000975050505050611b58565b81602001516001600160a01b031663a9059cbb61c350846060015185608001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b1580156133c857600080fd5b5087f1935050505080156133ee57506040513d60208110156133e957600080fd5b505160015b61371a576040516000815260443d101561340a575060006134a5565b60046000803e60005160e01c6308c379a0811461342b5760009150506134a5565b60043d036004833e81513d60248201116001600160401b0382111715613456576000925050506134a5565b80830180516001600160401b038111156134775760009450505050506134a5565b8060208301013d8601811115613495576000955050505050506134a5565b601f01601f191660405250925050505b806134b057506135f8565b6005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b1990921691909117909155604080850151606080870151602080890151895186519788526001600160a01b03958616928801929092529184168686015291850187905291909116608084015260a0830152516000805160206158638339815191529181900360c00190a160008051602061580e83398151915283602001518260405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156135af578181015183820152602001613597565b50505050905090810190601f1680156135dc5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1600098505050505050611b58565b3d808015613622576040519150601f19603f3d011682016040523d82523d6000602084013e613627565b606091505b506005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b1990921691909117909155604080850151606080870151602080890151895186519788526001600160a01b03958616928801929092529184168686015291850187905291909116608084015260a0830152516000805160206158638339815191529181900360c00190a1602080840151604080516001600160a01b03831681528084018281528551928201929092528451600080516020615883833981519152948693916060840191850190808383600083156135af578181015183820152602001613597565b80156137ce577f8b8816b9cf4590950a140d102435e65bcce6ee7c84bb38367dd2bb71b8ae4ad26001600460089054906101000a90046001600160401b03160384606001518560800151866020015160405180856001600160401b03168152602001846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b0316815260200194505050505060405180910390a1600198505050505050611b58565b602080840151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a082319261c350926024808201939291829003018187803b15801561381c57600080fd5b5086fa9350505050801561384257506040513d602081101561383d57600080fd5b505160015b613b6f576040516000815260443d101561385e575060006138f9565b60046000803e60005160e01c6308c379a0811461387f5760009150506138f9565b60043d036004833e81513d60248201116001600160401b03821117156138aa576000925050506138f9565b80830180516001600160401b038111156138cb5760009450505050506138f9565b8060208301013d86018111156138e9576000955050505050506138f9565b601f01601f191660405250925050505b806139045750613a4d565b6005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b19909216919091179091556040808601516060808801516020808a01518a5186519788526001600160a01b03958616928801929092529184168686015291850188905291909116608084015260a0830152516000805160206158638339815191529181900360c00190a160008051602061580e83398151915284602001518260405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613a035781810151838201526020016139eb565b50505050905090810190601f168015613a305780820380516001836020036101000a031916815260200191505b50935050505060405180910390a160009950505050505050611b58565b3d808015613a77576040519150601f19603f3d011682016040523d82523d6000602084013e613a7c565b606091505b506005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b19909216919091179091556040808601516060808801516020808a01518a5186519788526001600160a01b03958616928801929092529184168686015291850188905291909116608084015260a0830152516000805160206158638339815191529181900360c00190a1602080850151604080516001600160a01b0383168152808401828152855192820192909252845160008051602061588383398151915294869391606084019185019080838360008315613a035781810151838201526020016139eb565b6005805460016001600160401b03600160401b80840482169283019091160267ffffffffffffffff60401b19909216919091179091556040808601516060808801516020808a01518a5186519788526001600160a01b03958616928801929092529184168686015291850188905291909116608084015260a083015260c08201839052517f1de400dfa3e72ba83f12c6f1d8b9b85dc3d2aedc6eacc27b481267826aec74229181900360e00190a160009950505050505050611b58565b60016020526000908152604090205481565b677ce66c50e284000081565b61100781565b61100681565b61c35081565b6221272160e91b81565b600454600160c01b90046001600160401b031681565b61100281565b600281565b60045460009082906001600160401b03600160801b90910481169082168114613cef576040805162461bcd60e51b815260206004820152601560248201527439b2b8bab2b731b2903737ba1034b71037b93232b960591b604482015290519081900360640190fd5b604080516337d7f9c160e21b81526001600160401b0387166004820152905186916110039163df5fe70491602480820192602092909190829003018186803b158015613d3a57600080fd5b505afa158015613d4e573d6000803e3d6000fd5b505050506040513d6020811015613d6457600080fd5b5051613da15760405162461bcd60e51b8152600401808060200182810382526023815260200180615b116023913960400191505060405180910390fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b158015613de057600080fd5b505afa158015613df4573d6000803e3d6000fd5b505050506040513d6020811015613e0a57600080fd5b5051613e5d576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b604a8914613eb2576040805162461bcd60e51b815260206004820152601960248201527f77726f6e6720726566756e64207061636b6167652073697a6500000000000000604482015290519081900360640190fd5b6040805163cba510a960e01b81526001600160401b038816600482015290516000916110039163cba510a991602480820192602092909190829003018186803b158015613efe57600080fd5b505afa158015613f12573d6000803e3d6000fd5b505050506040513d6020811015613f2857600080fd5b50516040805180820190915260038082526269626360e81b6020830152600454929350613f6c9284929161183a91600160801b90046001600160401b0316906152b0565b613fb4576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b6004805467ffffffffffffffff60801b198116600160801b918290046001600160401b03908116600101811690920217825560408051631bb5062960e31b8152918a169282019290925290516000916110039163dda8314891602480820192602092909190829003018186803b15801561402d57600080fd5b505afa158015614041573d6000803e3d6000fd5b505050506040513d602081101561405757600080fd5b505190506000614086600561407a662386f26fc10000600163ffffffff61551316565b9063ffffffff6151d216565b604080516309a99b4f60e41b81526001600160a01b038516600482015260248101839052905191925061100291639a99b4f09160448082019260009290919082900301818387803b1580156140da57600080fd5b505af11580156140ee573d6000803e3d6000fd5b5050505061410c81662386f26fc1000061545f90919063ffffffff16565b604080516309a99b4f60e41b815233600482015260248101839052905191925061100291639a99b4f09160448082019260009290919082900301818387803b15801561415757600080fd5b505af115801561416b573d6000803e3d6000fd5b505050506141776157a4565b6141b68e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061556c92505050565b60208101519091506001600160a01b031661435f578051479081101561425457602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092526080810183905290517f3c4b6baf924ba2c954f9d76392ea4a866fda4b545684f54badbb5ab67c59f2779181900360a00190a1600098505050505050611b58565b604080830151835191516001600160a01b039091169180156108fc02916000818181858888f193505050506142e857602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a538339815191529181900360800190a1600098505050505050611b58565b602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff169282019290925290517f5d287c29bf23b5f4c450d5e83e5ca51c1f8225afb6f253e9d2ca107893b2a7e49181900360800190a1600198505050505050611b58565b6020808201516001600160a01b03166000908152600190915260409020546143f757602080820151604080840151845160608087015184516001600160a01b03968716815295909316958501959095528383015261ffff169282019290925290517fc9f4828eed39b4d08b0bcc16c824d67db7f30fdb36aa5572912134742f623f999181900360800190a16000975050505050611b58565b80602001516001600160a01b031663a9059cbb61c350836040015184600001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561446657600080fd5b5087f19350505050801561448c57506040513d602081101561448757600080fd5b505160015b6146e6576040516000815260443d10156144a857506000614543565b60046000803e60005160e01c6308c379a081146144c9576000915050614543565b60043d036004833e81513d60248201116001600160401b03821117156144f457600092505050614543565b80830180516001600160401b03811115614515576000945050505050614543565b8060208301013d860181111561453357600095505050505050614543565b601f01601f191660405250925050505b8061454e5750614602565b602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a538339815191529181900360800190a1602080830151604080516001600160a01b0383168152808401828152855192820192909252845160008051602061580e833981519152948693916060840191850190808383600083156135af578181015183820152602001613597565b3d80801561462c576040519150601f19603f3d011682016040523d82523d6000602084013e614631565b606091505b50602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a538339815191529181900360800190a1602080830151604080516001600160a01b03831681528084018281528551928201929092528451600080516020615883833981519152948693916060840191850190808383600083156135af578181015183820152602001613597565b801561476357602080830151604080850151855160608088015184516001600160a01b03968716815295909316958501959095528383015261ffff169282019290925290517f5d287c29bf23b5f4c450d5e83e5ca51c1f8225afb6f253e9d2ca107893b2a7e49181900360800190a1600198505050505050611b58565b602080830151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a082319261c350926024808201939291829003018187803b1580156147b157600080fd5b5086fa935050505080156147d757506040513d60208110156147d257600080fd5b505160015b614a31576040516000815260443d10156147f35750600061488e565b60046000803e60005160e01c6308c379a0811461481457600091505061488e565b60043d036004833e81513d60248201116001600160401b038211171561483f5760009250505061488e565b80830180516001600160401b0381111561486057600094505050505061488e565b8060208301013d860181111561487e5760009550505050505061488e565b601f01601f191660405250925050505b80614899575061494d565b602080840151604080860151865160608089015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a538339815191529181900360800190a1602080840151604080516001600160a01b0383168152808401828152855192820192909252845160008051602061580e83398151915294869391606084019185019080838360008315613a035781810151838201526020016139eb565b3d808015614977576040519150601f19603f3d011682016040523d82523d6000602084013e61497c565b606091505b50602080840151604080860151865160608089015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092529051600080516020615a538339815191529181900360800190a1602080840151604080516001600160a01b0383168152808401828152855192820192909252845160008051602061588383398151915294869391606084019185019080838360008315613a035781810151838201526020016139eb565b602080840151604080860151865160608089015184516001600160a01b03968716815295909316958501959095528383015261ffff16928201929092526080810183905290517f3c4b6baf924ba2c954f9d76392ea4a866fda4b545684f54badbb5ab67c59f2779181900360a00190a160009950505050505050611b58565b60006008821115614ad957614ad2836007198401600a0a63ffffffff6151d216565b905061244c565b614af0836008849003600a0a63ffffffff61551316565b9392505050565b60006402540be400820615614b53576040805162461bcd60e51b815260206004820152601a60248201527f72656c6179466565206973206d757374206265204e2a31653130000000000000604482015290519081900360640190fd5b662386f26fc10000821015614ba8576040805162461bcd60e51b815260206004820152601660248201527572656c617946656520697320746f6f206c6974746c6560501b604482015290519081900360640190fd5b42607801831015614bea5760405162461bcd60e51b81526004018080602001828103825260248152602001806157ea6024913960400191505060405180910390fd5b6000614c01836402540be40063ffffffff6151d216565b90506000806001600160a01b038916614cca576402540be400870615614c585760405162461bcd60e51b815260040180806020018281038252603c8152602001806159c8603c913960400191505060405180910390fd5b614c68878663ffffffff61521416565b3414614ca55760405162461bcd60e51b815260040180806020018281038252604c8152602001806158e8604c913960600191505060405180910390fd5b614cba876402540be40063ffffffff6151d216565b6221272160e91b92509050614f16565b6001600160a01b038916600090815260016020526040902054915081614d215760405162461bcd60e51b81526004018080602001828103825260308152602001806159986030913960400191505060405180910390fd5b843414614d5f5760405162461bcd60e51b815260040180806020018281038252602d815260200180615ae4602d913960400191505060405180910390fd5b6001600160a01b038916600090815260026020526040902054600881111580614da75750600881118015614da75750614da5886007198301600a0a63ffffffff61526e16565b155b614de25760405162461bcd60e51b815260040180806020018281038252603c8152602001806159c8603c913960400191505060405180910390fd5b614dec8882614ab0565b9150600881101580614e085750600881108015614e0857508782115b614e435760405162461bcd60e51b81526004018080602001828103825260258152602001806159346025913960400191505060405180910390fd5b677ce66c50e2840000821115614e8a5760405162461bcd60e51b815260040180806020018281038252603581526020018061582e6035913960400191505060405180910390fd5b604080516323b872dd60e01b8152336004820152306024820152604481018a905290516001600160a01b038c16916323b872dd9160648083019260209291908290030181600087803b158015614edf57600080fd5b505af1158015614ef3573d6000803e3d6000fd5b505050506040513d6020811015614f0957600080fd5b5051614f1457600080fd5b505b6004805460016001600160401b03600160c01b8084048216928301909116026001600160c01b0390921691909117909155604080519182523360208301526001600160a01b03808b1683830152606083018490528b16608083015260a0820184905260c0820188905260e08201859052517f5bd451c53ab05abd9855ceb52a469590655af1d732a4cfd67f1f9b53d74dc613918190036101000190a1600193505050505b95945050505050565b6004546001600160401b031681565b600454600160401b90046001600160401b031681565b61100381565b60006020819052908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b03909316939192909160ff82169161010090046001600160401b03169087565b6020015190565b815160009083906008108061505e575080516003115b1561506d57600091505061244c565b60005b81518110156151025781818151811061508557fe5b016020015160f81c6061118015906150b15750607a8282815181106150a657fe5b016020015160f81c11155b156150fa5760208282815181106150c457fe5b602001015160f81c60f81b60f81c0360f81b8282815181106150e257fe5b60200101906001600160f81b031916908160001a9053505b600101615070565b506040805160208082528183019092526060916020820181803683370190505090508360208201528082518151811061513757fe5b6020910101516001600160f81b031916602d60f81b1461515c5760009250505061244c565b600160005b83518110156151bc5782818151811061517657fe5b602001015160f81c60f81b6001600160f81b03191684828151811061519757fe5b01602001516001600160f81b031916146151b457600091506151bc565b600101615161565b5095945050505050565b61100081565b61100481565b6000614af083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506155b9565b600082820183811015614af0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000614af083836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f000000000000000081525061565b565b60408051600e808252818301909252606091630100020060ff851617918391602082018180368337505050600e818101969096526006810192909252509283525090919050565b60008561530657506000614fba565b606082518451865160800101016040519080825280601f01601f19166020018201604052801561533d576020820181803683370190505b509050600061534b826156bd565b602080890151825201905086600080615363896156c3565b808652602090950194909250905061537c8285836156cd565b92830192615389886156c3565b80865260209095019490925090506153a28285836156cd565b9283018a8152602001926153b5876156c3565b90925090506153c58285836156cd565b5083516020016153d36157cb565b60208183886065600019fa50516001149b9a5050505050505050505050565b6153fa615768565b615402615768565b602083810151825260348401516001600160a01b0316908201526054830151604082015260748301516060820152607583015160ff166080820152607d8301516001600160401b031660a0820152609d9092015160c08301525090565b6000614af083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061570e565b6154a9615768565b6154b1615768565b602083810151825260348401516001600160a01b0390811691830191909152604884015181166040830152605c840151166060820152607c830151608082015260848301516001600160401b031660a082015260a49092015160c08301525090565b6000826155225750600061244c565b8282028284828161552f57fe5b0414614af05760405162461bcd60e51b8152600401808060200182810382526021815260200180615a326021913960400191505060405180910390fd5b6155746157a4565b61557c6157a4565b602083810151825260348401516001600160a01b03908116918301919091526048840151166040820152604a9092015161ffff1660608301525090565b600081836156455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561560a5781810151838201526020016155f2565b50505050905090810190601f1680156156375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161565157fe5b0495945050505050565b600081836156aa5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561560a5781810151838201526020016155f2565b508284816156b457fe5b06949350505050565b60200190565b8051602090910191565b5b602081106156ed578251825260209283019290910190601f19016156ce565b915181516020939093036101000a6000190180199091169216919091179052565b600081848411156157605760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561560a5781810151838201526020016155f2565b505050900390565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040518060200160405280600190602082028036833750919291505056fe65787069726554696d65206d7573742062652074776f206d696e75746573206c617465726b12c383d2683ef480c42ffdc69b5e1b142f2d9e63993c4ba14789d43b9f4999616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e74cb6ddd4a252f58c1ff32f31fbb529dc35e8f6a81908f6211bbe7dfa94ef52f1f31a48d93e6850d386f670b9e376328798aa76e04eccb473f292a73cfd4955edb636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e642072657175657374726563656976656420424e4220616d6f756e7420646f65736e277420657175616c20746f207468652073756d206f66207472616e7366657220616d6f756e7420616e642072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e64416464727374686520636f6e747261637420686173206e6f74206265656e2062696e6420746f20616e79206265703220746f6b656e696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e6f6e6c79206265703265206f776e65722063616e20617070726f766520746869732062696e642072657175657374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7721ecc19fbf4244dbd58a78f83d525251163700dfdeec195b4e0ab98127ad790c616c6c6f77616e636520646f65736e277420657175616c20746f2028746f74616c537570706c79202d207065676779416d6f756e74294c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473726563656976656420424e4220616d6f756e7420646f65736e277420657175616c20746f2072656c61794665656c6967687420636c69656e74206e6f742073796e632074686520626c6f636b20796574a2646970667358221220d7615a8b291d8107db6238bd17888f9bc711967effd5c03a8b330619b06c3a8264736f6c63430006040033" }, "0x0000000000000000000000000000000000001005": { "balance": "0x0",