60806040523480156200001157600080fd5b5060405162002a5e38038062002a5e83398101604081905262000034916200008a565b80806003620000448282620001ee565b506004620000538282620001ee565b505060016005555050600680546001600160a01b03191633179055620002ba565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200009e57600080fd5b82516001600160401b0380821115620000b657600080fd5b818501915085601f830112620000cb57600080fd5b815181811115620000e057620000e062000074565b604051601f8201601f19908116603f011681019083821181831017156200010b576200010b62000074565b8160405282815288868487010111156200012457600080fd5b600093505b8284101562000148578484018601518185018701529285019262000129565b600086848301015280965050505050505092915050565b600181811c908216806200017457607f821691505b6020821081036200019557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001e957600081815260208120601f850160051c81016020861015620001c45750805b601f850160051c820191505b81811015620001e557828155600101620001d0565b5050505b505050565b81516001600160401b038111156200020a576200020a62000074565b62000222816200021b84546200015f565b846200019b565b602080601f8311600181146200025a5760008415620002415750858301515b600019600386901b1c1916600185901b178555620001e5565b600085815260208120601f198616915b828110156200028b578886015182559484019460019091019084016200026a565b5085821015620002aa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61279480620002ca6000396000f3fe6080604052600436106101665760003560e01c806343d32e9c116100d1578063a9059cbb1161008a578063c5bb316811610064578063c5bb316814610466578063d56d229d14610479578063dd62ed3e14610499578063ecbdbb32146104df57600080fd5b8063a9059cbb14610413578063ab560e7b14610433578063c45a01551461044657600080fd5b806343d32e9c1461035057806354cf2aeb14610365578063607375a114610386578063647846a5146103a857806370a08231146103c857806395d89b41146103fe57600080fd5b8063150b7a0211610123578063150b7a021461026d57806318160ddd146102b15780632099464e146102c657806323b872dd146102e657806323ff31a214610306578063313ce5671461032e57600080fd5b8063017e7e581461016b578063018a25e8146101a857806306fdde03146101cb5780630872c909146101ed5780630902f1ac1461020d578063095ea7b31461023d575b600080fd5b34801561017757600080fd5b5060095461018b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101b457600080fd5b506101bd6104f3565b60405190815260200161019f565b3480156101d757600080fd5b506101e061055c565b60405161019f9190612052565b3480156101f957600080fd5b506101bd610208366004612085565b6105ee565b34801561021957600080fd5b50600a54600b5460408051928352602083019190915260009082015260600161019f565b34801561024957600080fd5b5061025d6102583660046120b6565b610664565b604051901515815260200161019f565b34801561027957600080fd5b50610298610288366004612129565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200161019f565b3480156102bd57600080fd5b506002546101bd565b3480156102d257600080fd5b506101bd6102e1366004612085565b61067a565b3480156102f257600080fd5b5061025d6103013660046121ed565b6106c8565b6103196103143660046122ae565b61077b565b6040805192835260208301919091520161019f565b34801561033a57600080fd5b5060125b60405160ff909116815260200161019f565b34801561035c57600080fd5b506101bd610a23565b34801561037157600080fd5b5060085461033e90600160a01b900460ff1681565b34801561039257600080fd5b506103a66103a13660046122f5565b610a6d565b005b3480156103b457600080fd5b5060085461018b906001600160a01b031681565b3480156103d457600080fd5b506101bd6103e3366004612357565b6001600160a01b031660009081526020819052604090205490565b34801561040a57600080fd5b506101e0610b24565b34801561041f57600080fd5b5061025d61042e3660046120b6565b610b33565b6103a6610441366004612374565b610b40565b34801561045257600080fd5b5060065461018b906001600160a01b031681565b6101bd6104743660046123e1565b61156a565b34801561048557600080fd5b5060075461018b906001600160a01b031681565b3480156104a557600080fd5b506101bd6104b436600461245c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156104eb57600080fd5b5030316101bd565b60006002600b5410156105065750600090565b6103e8600b546103e861051991906124ab565b61052391906124c2565b600a5460085461053f90600160a01b900460ff166103e86124d5565b61ffff1661054d91906124ab565b6105579190612506565b905090565b60606003805461056b9061251a565b80601f01602080910402602001604051908101604052809291908181526020018280546105979061251a565b80156105e45780601f106105b9576101008083540402835291602001916105e4565b820191906000526020600020905b8154815290600101906020018083116105c757829003601f168201915b5050505050905090565b60006002600b54101561060357506000919050565b81600b5461061191906124c2565b61061d906103e86124ab565b600a5460085484919061063c90600160a01b900460ff166103e86124d5565b61ffff1661064a91906124ab565b61065491906124ab565b61065e9190612506565b92915050565b6000610671338484611891565b50600192915050565b60006001600b54101561068f57506000919050565b81600b5461069d9190612554565b6106a9906103e86124ab565b600a5460085484919061063c90600160a01b900460ff166103e8612567565b60006106d584848461196e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156107615760405162461bcd60e51b815260206004820152602a60248201527f4c50544f4b454e3a207472616e7366657220616d6f756e74206578636565647360448201526920616c6c6f77616e636560b01b60648201526084015b60405180910390fd5b61076e8533858403611891565b60019150505b9392505050565b600080610786611af5565b600061079160025490565b90508085600a546107a291906124ab565b6107ac9190612506565b91508085600b546107bd91906124ab565b6107c79190612506565b9250835183146108275760405162461bcd60e51b815260206004820152602560248201527f536f6f6e737761703a20546865204e4654206e756d62657220636865636b2066604482015264185a5b195960da1b6064820152608401610758565b600082116108775760405162461bcd60e51b815260206004820152601a60248201527f536f6f6e737761703a205f746f6b656e416d6f756e74203e20300000000000006044820152606401610758565b6008546001600160a01b0316156108a45760085461089f906001600160a01b03163384611b4e565b61090e565b604051600090339084908381818185875af1925050503d80600081146108e6576040519150601f19603f3d011682016040523d82523d6000602084013e6108eb565b606091505b505090508061090c5760405162461bcd60e51b815260040161075890612582565b505b82156109ba5760005b84518110156109b85760075485516001600160a01b03909116906342842e0e903090339089908690811061094d5761094d6125b9565b60200260200101516040518463ffffffff1660e01b8152600401610973939291906125cf565b600060405180830381600087803b15801561098d57600080fd5b505af11580156109a1573d6000803e3d6000fd5b5050505080806109b0906125f3565b915050610917565b505b6109c43386611c70565b6109cc611db9565b336001600160a01b03167f7042eb21a067b304681135674911c5bd7df547e0492cc77a83e431faafda1ef5858488604051610a099392919061260c565b60405180910390a250610a1c6001600555565b9250929050565b60006001600b541015610a365750600090565b600b54610a45906103e86124ab565b610a51906103e8612554565b600a5460085461053f90600160a01b900460ff166103e8612567565b610a75611af5565b6006546001600160a01b03163314610ac55760405162461bcd60e51b815260206004820152601360248201527229b7b7b739bbb0b81d102327a92124a22222a760691b6044820152606401610758565b60088054600780546001600160a01b039687166001600160a01b03199182161790915593851660ff96909616600160a01b0284166001600160a81b03199091161794909417909355600980549390921692169190911790556001600555565b60606004805461056b9061251a565b600061067133848461196e565b610b48611af5565b600083600081518110610b5d57610b5d6125b9565b602002602001015111610bc35760405162461bcd60e51b815260206004820152602860248201527f536f6f6e73776170506169723a20494e53554646494349454e545f4f555450556044820152671517d05353d5539560c21b6064820152608401610758565b8151835114610c045760405162461bcd60e51b815260206004820152600d60248201526c6c656e7468206e6f742065717560981b6044820152606401610758565b600080600660009054906101000a90046001600160a01b03166001600160a01b0316636611f5286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e9190612659565b90506000610c8b86611eb5565b905060008651118015610c9e5750836001145b1561118e57610cad86516105ee565b600854909350600090606490610ccf90600160a01b900460ff166103e86124d5565b60085461ffff9190911690610cee90600160a01b900460ff16876124ab565b610cf89190612506565b610d039060146124ab565b610d0d9190612506565b6008549091506001600160a01b031615610e4457610d2c848387611f03565b610d485760405162461bcd60e51b815260040161075890612676565b6008546001600160a01b03166323b872dd3330610d6585896124c2565b6040518463ffffffff1660e01b8152600401610d83939291906125cf565b6020604051808303816000875af1158015610da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc691906126ad565b506008546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610dfb903390879086906004016125cf565b6020604051808303816000875af1158015610e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e91906126ad565b50610fe3565b610e4f843487611f03565b610e6b5760405162461bcd60e51b815260040161075890612676565b34821115610ebb5760405162461bcd60e51b815260206004820152601c60248201527f536f6f6e737761703a206d6f6e6579203c3d206d73672e76616c7565000000006044820152606401610758565b6000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f08576040519150601f19603f3d011682016040523d82523d6000602084013e610f0d565b606091505b5050905080610f2e5760405162461bcd60e51b815260040161075890612582565b610f396032346124c2565b851015610fe157600033610f4d87346124c2565b604051600081818185875af1925050503d8060008114610f89576040519150601f19603f3d011682016040523d82523d6000602084013e610f8e565b606091505b5050905080610fdf5760405162461bcd60e51b815260206004820152601b60248201527f536f6f6e737761703a20526566756e6420746f207061792045544800000000006044820152606401610758565b505b505b60005b8751811015611187576000888281518110611003576110036125b9565b6020026020010151116110585760405162461bcd60e51b815260206004820152601f60248201527f536f6f6e73776170506169723a205f746f6b656e416d6f756e7473203e2030006044820152606401610758565b600087828151811061106c5761106c6125b9565b6020908102919091010151600754604051632142170760e11b81529192506001600160a01b0316906342842e0e906110ac903090339086906004016125cf565b600060405180830381600087803b1580156110c657600080fd5b505af11580156110da573d6000803e3d6000fd5b50505050600080831115611110576110f1836105ee565b6110ff610208856001612554565b61110991906124c2565b9050611121565b61111e610208846001612554565b90505b6040805188815260208101849052908101829052606081018390526080810189905233907f6d2535bccee43630e01014525de773080b47e1a82c56ef6a30802933a48c9e349060a00160405180910390a25050808061117f906125f3565b915050610fe6565b5050611550565b6000855111801561119f5750836002145b15611550576111ae855161067a565b6008549093508390600090620186a090600160a01b900460ff166111d4816103e8612567565b61ffff166111e4886103e86124ab565b6111ee9190612506565b6111f891906124ab565b6112039060146124ab565b61120d9190612506565b905061121a828488611f03565b6112365760405162461bcd60e51b815260040161075890612676565b6008546001600160a01b03161561127a5760085461125e906001600160a01b03163384611b4e565b600854611275906001600160a01b03168583611b4e565b611388565b604051600090339084908381818185875af1925050503d80600081146112bc576040519150601f19603f3d011682016040523d82523d6000602084013e6112c1565b606091505b50509050806112e25760405162461bcd60e51b815260040161075890612582565b6000856001600160a01b03168360405160006040518083038185875af1925050503d806000811461132f576040519150601f19603f3d011682016040523d82523d6000602084013e611334565b606091505b50509050806113855760405162461bcd60e51b815260206004820181905260248201527f536f6f6e737761703a20466565206661696c75726520746f20706179204554486044820152606401610758565b50505b60005b875181101561154c57600086116113e45760405162461bcd60e51b815260206004820152601d60248201527f536f6f6e73776170506169722e737761703a205f7072696365203e20300000006044820152606401610758565b60075488516001600160a01b03909116906342842e0e90339030908c9086908110611411576114116125b9565b60200260200101516040518463ffffffff1660e01b8152600401611437939291906125cf565b600060405180830381600087803b15801561145157600080fd5b505af1158015611465573d6000803e3d6000fd5b5050505060008082111561149b5761147c8261067a565b61148a6102e1846001612554565b61149491906124c2565b90506114ac565b6114a96102e1836001612554565b90505b336001600160a01b03167f6d2535bccee43630e01014525de773080b47e1a82c56ef6a30802933a48c9e34888b85815181106114ea576114ea6125b9565b6020026020010151848d8781518110611505576115056125b9565b60209081029190910181015160408051958652918501939093528301526060820152608081018b905260a00160405180910390a25080611544816125f3565b91505061138b565b5050505b611558611db9565b5050506115656001600555565b505050565b6000611574611af5565b600b5483906115849084906124ab565b600a5461159190836124ab565b11156115e95760405162461bcd60e51b815260206004820152602160248201527f536f6f6e737761703a204e46543c2d3e544f4b454e5f524154494f5f4552524f6044820152602960f91b6064820152608401610758565b60005b81811015611683576007546001600160a01b03166342842e0e3330898986818110611619576116196125b9565b905060200201356040518463ffffffff1660e01b815260040161163e939291906125cf565b600060405180830381600087803b15801561165857600080fd5b505af115801561166c573d6000803e3d6000fd5b50505050808061167b906125f3565b9150506115ec565b506008546001600160a01b031615611712576008546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906116c9903390309088906004016125cf565b6020604051808303816000875af11580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170c91906126ad565b5061176d565b34831461176d5760405162461bcd60e51b815260206004820152602360248201527f536f6f6e737761703a205f746f6b656e416d6f756e74203d3d206d73672e76616044820152626c756560e81b6064820152608401610758565b600061177860025490565b9050600081156117cf57600b5461178f83856124ab565b6117999190612506565b90506000600b5483856117ac91906124ab565b6117b691906126cf565b11156117ca576117c7600182612554565b90505b6117da565b50670de0b6b3a76400005b6000811161182a5760405162461bcd60e51b815260206004820152601860248201527f536f6f6e737761703a205f6c6971756964697479203e203000000000000000006044820152606401610758565b6118343382611f45565b61183c611db9565b336001600160a01b03167fd5d1363a6b4b64a9125f581060172bf0b5b938e576119162b92fd78b387f59538888888560405161187b94939291906126e3565b60405180910390a2925050506107746001600555565b6001600160a01b038316158015906118b157506001600160a01b03821615155b61190c5760405162461bcd60e51b815260206004820152602660248201527f4c50544f4b454e3a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610758565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383161580159061198e57506001600160a01b03821615155b6119ea5760405162461bcd60e51b815260206004820152602760248201527f4c50544f4b454e3a207472616e736665722066726f6d20746865207a65726f206044820152666164647265737360c81b6064820152608401610758565b6001600160a01b03831660009081526020819052604090205481811015611a645760405162461bcd60e51b815260206004820152602860248201527f4c50544f4b454e3a207472616e7366657220616d6f756e7420657863656564736044820152672062616c616e636560c01b6064820152608401610758565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611a9b908490612554565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ae791815260200190565b60405180910390a350505050565b600260055403611b475760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610758565b6002600555565b6040516001600160a01b03838116602483015260448201839052600091829186169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b17905251611ba89190612729565b6000604051808303816000865af19150503d8060008114611be5576040519150601f19603f3d011682016040523d82523d6000602084013e611bea565b606091505b50915091506000815160001480611c10575081806020019051810190611c1091906126ad565b9050828015611c1c5750805b611c685760405162461bcd60e51b815260206004820152601960248201527f536f6f6e737761703a205452414e534645525f4641494c4544000000000000006044820152606401610758565b505050505050565b6001600160a01b038216611cd25760405162461bcd60e51b815260206004820152602360248201527f4c50544f4b454e3a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610758565b6001600160a01b03821660009081526020819052604090205481811015611d475760405162461bcd60e51b8152602060048201526024808201527f4c50544f4b454e3a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610758565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611d769084906124c2565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611961565b6008546001600160a01b031615611e3e576008546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e369190612745565b600a55611e44565b3031600a555b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb09190612745565b600b55565b600080805b8351811015611efc57838181518110611ed557611ed56125b9565b602002602001015182611ee89190612554565b915080611ef4816125f3565b915050611eba565b5092915050565b600081600103611f2457828411611f1c57506001610774565b506000610774565b81600203611f3b57828410611f1c57506001610774565b5060009392505050565b6001600160a01b038216611fa55760405162461bcd60e51b815260206004820152602160248201527f4c50544f4b454e3a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610758565b8060026000828254611fb79190612554565b90915550506001600160a01b03821660009081526020819052604081208054839290611fe4908490612554565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60005b83811015612049578181015183820152602001612031565b50506000910152565b602081526000825180602084015261207181604085016020870161202e565b601f01601f19169190910160400192915050565b60006020828403121561209757600080fd5b5035919050565b6001600160a01b03811681146120b357600080fd5b50565b600080604083850312156120c957600080fd5b82356120d48161209e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612121576121216120e2565b604052919050565b6000806000806080858703121561213f57600080fd5b843561214a8161209e565b935060208581013561215b8161209e565b935060408601359250606086013567ffffffffffffffff8082111561217f57600080fd5b818801915088601f83011261219357600080fd5b8135818111156121a5576121a56120e2565b6121b7601f8201601f191685016120f8565b915080825289848285010111156121cd57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060006060848603121561220257600080fd5b833561220d8161209e565b9250602084013561221d8161209e565b929592945050506040919091013590565b600082601f83011261223f57600080fd5b8135602067ffffffffffffffff82111561225b5761225b6120e2565b8160051b61226a8282016120f8565b928352848101820192828101908785111561228457600080fd5b83870192505b848310156122a35782358252918301919083019061228a565b979650505050505050565b600080604083850312156122c157600080fd5b82359150602083013567ffffffffffffffff8111156122df57600080fd5b6122eb8582860161222e565b9150509250929050565b6000806000806080858703121561230b57600080fd5b843560ff8116811461231c57600080fd5b9350602085013561232c8161209e565b9250604085013561233c8161209e565b9150606085013561234c8161209e565b939692955090935050565b60006020828403121561236957600080fd5b81356107748161209e565b60008060006060848603121561238957600080fd5b833567ffffffffffffffff808211156123a157600080fd5b6123ad8783880161222e565b945060208601359150808211156123c357600080fd5b506123d08682870161222e565b925050604084013590509250925092565b6000806000604084860312156123f657600080fd5b833567ffffffffffffffff8082111561240e57600080fd5b818601915086601f83011261242257600080fd5b81358181111561243157600080fd5b8760208260051b850101111561244657600080fd5b6020928301989097509590910135949350505050565b6000806040838503121561246f57600080fd5b823561247a8161209e565b9150602083013561248a8161209e565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761065e5761065e612495565b8181038181111561065e5761065e612495565b61ffff818116838216019080821115611efc57611efc612495565b634e487b7160e01b600052601260045260246000fd5b600082612515576125156124f0565b500490565b600181811c9082168061252e57607f821691505b60208210810361254e57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561065e5761065e612495565b61ffff828116828216039080821115611efc57611efc612495565b6020808252601c908201527f536f6f6e737761703a204661696c75726520746f207061792045544800000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001820161260557612605612495565b5060010190565b606080825284519082018190526000906020906080840190828801845b8281101561264557815184529284019290840190600101612629565b505050908301949094525060400152919050565b60006020828403121561266b57600080fd5b81516107748161209e565b60208082526017908201527f536f6f6e737761703a204869676820736c697070616765000000000000000000604082015260600190565b6000602082840312156126bf57600080fd5b8151801515811461077457600080fd5b6000826126de576126de6124f0565b500690565b6060808252810184905260006001600160fb1b0385111561270357600080fd5b8460051b8087608085013760208301949094525060408101919091520160800192915050565b6000825161273b81846020870161202e565b9190910192915050565b60006020828403121561275757600080fd5b505191905056fea26469706673582212200968e389e715df8c690e0a54a690e8c3e1691386ab600478085e7087ce958edf64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000094554482d415a554b490000000000000000000000000000000000000000000000