0x60a06040523060805234801561001457600080fd5b50608051614d6661004c60003960008181610e6c01528181610f0201528181611241015281816112d701526113d20152614d666000f3fe6080604052600436106102895760003560e01c80638705fcd411610153578063cbd039ed116100cb578063dee1bf7c1161007f578063f23a6e6111610064578063f23a6e61146108c8578063f2fde38b1461090d578063fdbda0ec1461092d57600080fd5b8063dee1bf7c14610883578063dfe0a9b1146108b157600080fd5b8063d45557cc116100b0578063d45557cc14610839578063d6febde814610859578063d8501f4f1461086c57600080fd5b8063cbd039ed14610802578063cfec91091461081957600080fd5b80639106d7ba11610122578063aaa23a7e11610107578063aaa23a7e1461067c578063bc197c811461069c578063bfb231d21461071257600080fd5b80639106d7ba14610645578063964bc33f1461065c57600080fd5b80638705fcd41461050a5780638a72ea6a1461052a5780638da5cb5b146106065780638fa097ee1461062557600080fd5b80634d801b651161020157806358eddaa2116101b5578063776d1a011161019a578063776d1a01146104b45780637ddb9da2146104d457806381257bd5146104ea57600080fd5b806358eddaa21461047f578063715018a61461049f57600080fd5b80634f1ef286116101e65780634f1ef286146104365780635210eb561461044957806352d1902d1461046a57600080fd5b80634d801b65146103de5780634f0e0ef31461041557600080fd5b806320f09353116102585780633659cfe61161023d5780633659cfe6146103655780634127535814610385578063485cc955146103be57600080fd5b806320f09353146103305780632658bad51461035057600080fd5b806301c234a81461029557806301ffc9a7146102be5780630f0a1b9e146102ee5780631e9a53c01461031057600080fd5b3661029057005b600080fd5b3480156102a157600080fd5b506102ab6103e881565b6040519081526020015b60405180910390f35b3480156102ca57600080fd5b506102de6102d936600461451f565b61094d565b60405190151581526020016102b5565b3480156102fa57600080fd5b5061030e610309366004614576565b6109e6565b005b34801561031c57600080fd5b5061030e61032b3660046145ae565b610bd1565b34801561033c57600080fd5b5061030e61034b3660046145d0565b610dec565b34801561035c57600080fd5b506102ab602881565b34801561037157600080fd5b5061030e6103803660046145fc565b610e62565b34801561039157600080fd5b50610199546103a6906001600160a01b031681565b6040516001600160a01b0390911681526020016102b5565b3480156103ca57600080fd5b5061030e6103d9366004614619565b610fff565b3480156103ea57600080fd5b506103a66103f93660046145fc565b610193602052600090815260409020546001600160a01b031681565b34801561042157600080fd5b50610191546103a6906001600160a01b031681565b61030e61044436600461475e565b611237565b34801561045557600080fd5b5061019c546103a6906001600160a01b031681565b34801561047657600080fd5b506102ab6113c5565b34801561048b57600080fd5b506103a661049a3660046147bc565b61148a565b3480156104ab57600080fd5b5061030e6115fa565b3480156104c057600080fd5b5061030e6104cf3660046145fc565b61160e565b3480156104e057600080fd5b506102ab61012c81565b3480156104f657600080fd5b5061030e6105053660046145ae565b6116a7565b34801561051657600080fd5b5061030e6105253660046145fc565b611fe8565b34801561053657600080fd5b506105a8610545366004614834565b61019e60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460099099015497986001600160a01b03978816989697958616969495909316939192909160ff168a565b604080519a8b526001600160a01b03998a1660208c01528a019790975294871660608901526080880193909352941660a086015260c085019390935260e08401929092526101008301919091521515610120820152610140016102b5565b34801561061257600080fd5b5061012d546001600160a01b03166103a6565b34801561063157600080fd5b5061030e61064036600461484d565b612081565b34801561065157600080fd5b506102ab6101965481565b34801561066857600080fd5b5061030e610677366004614834565b61260a565b34801561068857600080fd5b5061030e6106973660046148b4565b61284c565b3480156106a857600080fd5b506106e16106b7366004614990565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016102b5565b34801561071e57600080fd5b5061079a61072d366004614834565b61019460205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498996001600160a01b039889169997989687169795871696949594909316939192909160ff168b565b604080519b8c526001600160a01b039a8b1660208d01528b019890985295881660608a0152938716608089015260a088019290925290941660c086015260e08501939093526101008401929092526101208301919091521515610140820152610160016102b5565b34801561080e57600080fd5b506102ab61019d5481565b34801561082557600080fd5b5061030e6108343660046145ae565b612c34565b34801561084557600080fd5b5061030e6108543660046145ae565b612eb7565b61030e6108673660046145ae565b61311c565b34801561087857600080fd5b506102ab6101975481565b34801561088f57600080fd5b506102ab61089e3660046145fc565b6101986020526000908152604090205481565b3480156108bd57600080fd5b506102ab6101955481565b3480156108d457600080fd5b506106e16108e3366004614a3e565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b34801561091957600080fd5b5061030e6109283660046145fc565b6139ee565b34801561093957600080fd5b506103a6610948366004614834565b613a7b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806109e057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008111610a3b5760405162461bcd60e51b815260206004820152601160248201527f696e76616c6964206e657720707269636500000000000000000000000000000060448201526064015b60405180910390fd5b600083815261019460205260409020600a015460ff16610a9d5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c6964204974656d20696400000000000000000000000000000000006044820152606401610a32565b600083815261019460205260409020600401546001600160a01b0316331480610ad1575061012d546001600160a01b031633145b610b1d5760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206f776e65722063616e2075706461746520707269636500000000006044820152606401610a32565b60008381526101946020908152604091829020600781018490556006810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03878116918217909255600183015460029093015485518981529390921693830193909352928101929092526060820183905260808201527f2cbfcbbbbf417dc51e78fd175481d9feba7e2f79ea67df62ff6c68cb772d14f89060a0015b60405180910390a1505050565b600082815261019460205260409020600a015460ff16610c335760405162461bcd60e51b815260206004820152600f60248201527f696e76616c6964204974656d20696400000000000000000000000000000000006044820152606401610a32565b600082815261019460205260409020600401546001600160a01b03163314610c9d5760405162461bcd60e51b815260206004820152601860248201527f6f6e6c79206f776e65722063616e20616464206974656d7300000000000000006044820152606401610a32565b6000828152610194602052604090819020600181015460029091015491517ff242432a00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101929092526064820183905260a06084830152601f60a48301527f616464206974656d7320746f20416c74757261204d61726b6574706c6163650060c48301526001600160a01b03169063f242432a9060e401600060405180830381600087803b158015610d5a57600080fd5b505af1158015610d6e573d6000803e3d6000fd5b50505060008381526101946020526040902060050154610d8f915082613aa6565b600083815261019460209081526040918290206005018390558151858152908101849052908101919091527f89c7e27f6c541c27162118063d2f8cfa86e3081872ec9d9559d3ed1c2b5cc989906060015b60405180910390a15050565b610df4613ab2565b61012c8110610e455760405162461bcd60e51b815260206004820152601060248201527f746f6f20626967207377617020666565000000000000000000000000000000006044820152606401610a32565b6001600160a01b0390911660009081526101986020526040902055565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610f005760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610a32565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610f5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610fd75760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610a32565b610fe081613b0d565b60408051600080825260208201909252610ffc91839190613b15565b50565b600054610100900460ff161580801561101f5750600054600160ff909116105b806110395750303b158015611039575060005460ff166001145b6110ab5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a32565b6000805460ff1916600117905580156110eb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6110f3613cd3565b6110fb613d58565b611103613dd5565b61019180546001600160a01b038085167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925561019980549286169290911691909117905560008052610198602090815260287f4423f7c6e52e9185383a9cf02b7a6886e99ba21d91d7a83c121c6d17c40c5b7955604080518082018252600981527f416c747572614e465400000000000000000000000000000000000000000000008184015281516060810190925260298083526111d293919291614ce190830139600161148a565b50801561123257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610bc4565b505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036112d55760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610a32565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b0316146113ac5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610a32565b6113b582613b0d565b6113c182826001613b15565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114655760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a32565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6000611494613e5a565b61019c546114aa906001600160a01b0316613eb5565b6040517f7dbaab620000000000000000000000000000000000000000000000000000000081529091506001600160a01b03821690637dbaab62906114fa9087908790339030908990600401614b15565b600060405180830381600087803b15801561151457600080fd5b505af1158015611528573d6000803e3d6000fd5b50506101928054600181019091557ffcfced99f9d921eebdc59aa6f7a664084bd564a3d2d54ebc1a5c057c99c67aba0180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b038616908117909255600091825261019360205260409182902080543392168217905590517f981a986daacd6e0acef42ca602049f8c94ea97502ab31cfc718f69c2c836084e93506115e09250849190889088908890614b64565b60405180910390a16115f3600161015f55565b9392505050565b611602613ab2565b61160c6000613f5e565b565b611616613ab2565b6001600160a01b03811661166c5760405162461bcd60e51b815260206004820152600d60248201527f217a65726f2061646472657373000000000000000000000000000000000000006044820152606401610a32565b61019c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600082815261019e60209081526040918290208251610140810184528154815260018201546001600160a01b039081169382019390935260028201549381019390935260038101548216606084015260048101546080840152600581015490911660a0830152600681015460c0830152600781015460e083015260088101546101008301526009015460ff16151561012082018190526117895760405162461bcd60e51b815260206004820152601060248201527f696e76616c6964204f66666572206964000000000000000000000000000000006044820152606401610a32565b336001600160a01b031681606001516001600160a01b0316036117ee5760405162461bcd60e51b815260206004820152601e60248201527f6f66666572206f776e65722063616e277420616363657074206f6666657200006044820152606401610a32565b42816101000151116118425760405162461bcd60e51b815260206004820152600d60248201527f6f666665722065787069726564000000000000000000000000000000000000006044820152606401610a32565b8161185e8260e001518360800151613fc990919063ffffffff16565b10156118ac5760405162461bcd60e51b815260206004820152601960248201527f696e73756666696369656e74206f6666657220616d6f756e74000000000000006044820152606401610a32565b602081015160408083015190517efdd58e00000000000000000000000000000000000000000000000000000000815233600482015260248101919091526000916001600160a01b03169062fdd58e90604401602060405180830381865afa15801561191b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193f9190614bb7565b9050828110156119915760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204e46542062616c616e636500000000000000006044820152606401610a32565b60a08201516001600160a01b031660009081526101986020526040812054908190036119bb575060285b60c08301516000906119cd9086613fd5565b9050600084602001516001600160a01b031663d26509b186604001516040518263ffffffff1660e01b8152600401611a0791815260200190565b602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190614bb7565b90508215611b645760a08501516060860151610199546001600160a01b03928316926323b872dd929116611a886103e8611a82888a613fd5565b90613fe1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b189190614bd0565b611b645760405162461bcd60e51b815260206004820152601c60248201527f6661696c656420746f207472616e736665722061646d696e20666565000000006044820152606401610a32565b8015611ce5578460a001516001600160a01b03166323b872dd866060015187602001516001600160a01b031663589a174389604001516040518263ffffffff1660e01b8152600401611bb891815260200190565b602060405180830381865afa158015611bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf99190614bed565b611c096103e8611a828888613fd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c999190614bd0565b611ce55760405162461bcd60e51b815260206004820152601e60248201527f6661696c656420746f207472616e736665722063726561746f722066656500006044820152606401610a32565b8460a001516001600160a01b03166323b872dd866060015133611d2d6103e8611a82611d2688611d208c6103e8613fc990919063ffffffff16565b90613fc9565b8990613fd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd9190614bd0565b611e095760405162461bcd60e51b815260206004820152601b60248201527f6661696c656420746f207472616e7366657220746f206f776e657200000000006044820152606401610a32565b6020850151606086015160408088015190517ff242432a0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03928316602482015260448101919091526064810189905260a06084820152600f60a48201527f6275792066726f6d20416c74757261000000000000000000000000000000000060c482015291169063f242432a9060e401600060405180830381600087803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b505050600088815261019e6020526040902060070154611ef2915087613aa6565b600088815261019e602052604090206007810182905560048101546009909101805460ff19169190921017905561019654611f2d9087613aa6565b6101965561019754611f40906001613aa6565b6101975560c085015160a0860151600089815261019e60205260409081902060070154606089015191517fd7e3154088accdecfa2a6baf652c94f1bc7dbb2073bcfbd837e49e2c2a13bf6894611fd7948d948d9492939192913390968752602087019590955260408601939093526001600160a01b039182166060860152608085015290811660a08401521660c082015260e00190565b60405180910390a150505050505050565b611ff0613ab2565b6001600160a01b0381166120465760405162461bcd60e51b815260206004820152600f60248201527f696e76616c6964206164647265737300000000000000000000000000000000006044820152606401610a32565b61019980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600083116120d15760405162461bcd60e51b815260206004820152600d60248201527f696e76616c6964207072696365000000000000000000000000000000000000006044820152606401610a32565b600084116121215760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610a32565b85811561223e576040517f731133e9000000000000000000000000000000000000000000000000000000008152306004820152602481018790526044810186905260806064820152601260848201527f4d696e7420627920416c75747572614e4654000000000000000000000000000060a48201526001600160a01b0382169063731133e99060c4016020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed9190614bd0565b6122395760405162461bcd60e51b815260206004820152600b60248201527f6d696e74206661696c65640000000000000000000000000000000000000000006044820152606401610a32565b6122fb565b6040517ff242432a00000000000000000000000000000000000000000000000000000000815233600480830191909152306024830152604482018890526064820187905260a0608483015260a48201527f4c6973740000000000000000000000000000000000000000000000000000000060c48201526001600160a01b0382169063f242432a9060e401600060405180830381600087803b1580156122e257600080fd5b505af11580156122f6573d6000803e3d6000fd5b505050505b6101955461230a906001613aa6565b61019581815560008281526101946020526040808220938455600193840180546001600160a01b03808e167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255845484528284206002018c90558454845282842060049081018054831633179055855485528385206005018c9055855485528385206007018b90558554855283852060060180548b85169316929092179091559354835291819020600a01805460ff191690941790935591517f589a17430000000000000000000000000000000000000000000000000000000081529183169163589a174391612406918a910190815260200190565b602060405180830381865afa92505050801561245d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261245a91810190614bed565b60015b612497573d80801561248b576040519150601f19603f3d011682016040523d82523d6000602084013e612490565b606091505b5050612578565b61019554600090815261019460205260409081902060030180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038481169190911790915590517fd26509b1000000000000000000000000000000000000000000000000000000008152600481018990529083169063d26509b190602401602060405180830381865afa15801561253b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255f9190614bb7565b6101955460009081526101946020526040902060080155505b6101955460008181526101946020908152604091829020600381015460089091015483519485526001600160a01b03808d16938601939093529284018a9052606084018990526080840188905281871660a08501521660c08301523360e08301526101008201527f607ce7e5c86df27385f33257e85f19c736ca990fc74b5cb3e66fb07589bf20459061012001611fd7565b600081815261019460205260409020600a015460ff1661266c5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c6964204974656d20696400000000000000000000000000000000006044820152606401610a32565b600081815261019460205260409020600401546001600160a01b03163314806126a0575061012d546001600160a01b031633145b6126ec5760405162461bcd60e51b815260206004820152601560248201527f6f6e6c79206f776e65722063616e2064656c69737400000000000000000000006044820152606401610a32565b60008181526101946020526040908190206001810154600480830154600284015460059094015494517ff242432a00000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0390811660248301526044820193909352606481019390935260a06084840152601e60a48401527f64656c6973742066726f6d20416c74757261204d61726b6574706c616365000060c4840152169063f242432a9060e401600060405180830381600087803b1580156127b957600080fd5b505af11580156127cd573d6000803e3d6000fd5b5050506000828152610194602090815260408083206005810193909355600a8301805460ff19169055600183015460029093015481518681526001600160a01b03909416928401929092528201527fb27a8dd2e10cd9195e1d9476d1729ca9837af3170536cc31de8b83b46ea454fc915060600160405180910390a150565b6000821161289c5760405162461bcd60e51b815260206004820152600d60248201527f696e76616c6964207072696365000000000000000000000000000000000000006044820152606401610a32565b4281116128eb5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964206578706972650000000000000000000000000000000000006044820152606401610a32565b6001600160a01b0383166129415760405162461bcd60e51b815260206004820152601660248201527f6e6f7420616c6c6f77206e6174697665206173736574000000000000000000006044820152606401610a32565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561299e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c29190614bb7565b6129cc8386613fd5565b11158015612a6957506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201526001600160a01b0384169063dd62ed3e90604401602060405180830381865afa158015612a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5c9190614bb7565b612a668386613fd5565b11155b612adb5760405162461bcd60e51b815260206004820152602160248201527f696e73756666696369656e742062616c616e6365206f7220616c6c6f77616e6360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610a32565b61019d54612aea906001613aa6565b61019d818155600091825261019e60209081526040808420600190810180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b038e8116918217909355865488528488206002018d9055865488528488206003018054339084168117909155875489528589206004018d9055875489528589206005018054909316938c16938417909255865488528488206006018a9055865488528488206007018890558654885284882060080189905586548852848820600901805460ff1916909417909355945483519081529384019590955290820152606081018890526080810187905260a0810185905260c081019290925260e082018390526101008201527f95ea20a9060d2be6bd0508fab5a0ba3ecd309e13c672f80bc36c7bbd1a4e620e906101200160405180910390a1505050505050565b600082815261019460205260409020600a015460ff16612c965760405162461bcd60e51b815260206004820152600f60248201527f696e76616c6964204974656d20696400000000000000000000000000000000006044820152606401610a32565b600082815261019460205260409020600401546001600160a01b03163314612d005760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206f776e65722063616e2072656d6f7665206974656d7300000000006044820152606401610a32565b6000828152610194602052604090819020600181015460029091015491517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201523360248083019190915260448201939093526064810184905260a0608482015260a48101929092527f72656d6f7665206974656d732066726f6d20416c74757261204d61726b65747060c48301527f6c6163650000000000000000000000000000000000000000000000000000000060e48301526001600160a01b03169063f242432a9061010401600060405180830381600087803b158015612de957600080fd5b505af1158015612dfd573d6000803e3d6000fd5b50505050612e62816040518060400160405280601c81526020017f696e73756666696369656e742062616c616e6365206f66206974656d00000000815250610194600086815260200190815260200160002060050154613fed9092919063ffffffff16565b600083815261019460209081526040918290206005018390558151858152908101849052908101919091527f5d7b19235817dd6844c345a1b9a28049d64cd37184a02b3472fe1ac857d01aa090606001610de0565b600082815261019e60209081526040918290208251610140810184528154815260018201546001600160a01b039081169382019390935260028201549381019390935260038101548216606084015260048101546080840152600581015490911660a0830152600681015460c0830152600781015460e083015260088101546101008301526009015460ff1615156101208201819052612f995760405162461bcd60e51b815260206004820152601060248201527f696e76616c6964204f66666572206964000000000000000000000000000000006044820152606401610a32565b60608101516001600160a01b03163314612ff55760405162461bcd60e51b815260206004820152601660248201527f6f776e65722063616e2063616e63656c206f66666572000000000000000000006044820152606401610a32565b6000821180156130185750818160e001516130109190614c39565b816080015110155b6130645760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610a32565b600061308583611d208460e001518560800151613fc990919063ffffffff16565b600085815261019e60205260409020600701549091506130a59084613aa6565b600085815261019e60205260408120600701919091558190036130dd57600084815261019e60205260409020600901805460ff191690555b60408051858152602081018590527f33559c26e53c3e89ff8feeaf6cfba76e46453390b4a80b64e8672dad0a0a45fb910160405180910390a150505050565b613124613e5a565b600082815261019460205260409020600a015460ff166131865760405162461bcd60e51b815260206004820152600f60248201527f696e76616c6964204974656d20696400000000000000000000000000000000006044820152606401610a32565b600082815261019460205260409020600501548111156131e85760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204e46542062616c616e636500000000000000006044820152606401610a32565b600082815261019460205260409020600601546001600160a01b031615158061322d575060008281526101946020526040902060070154349061322b9083613fd5565b145b6132795760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610a32565b6000828152610194602090815260408083208151610160810183528154815260018201546001600160a01b0390811682860152600283015482850152600383015481166060830152600483015481166080830152600583015460a083015260068301541660c08201819052600783015460e083015260088301546101008301526009830154610120830152600a9092015460ff161515610140820152908452610198909252822054909181900361332e575060285b60e08201516000906133409085613fd5565b90506000613362846101000151611d20856103e8613fc990919063ffffffff16565b60c08501519091506001600160a01b03166134d65782156133ef57610199546133a3906001600160a01b031661339e6103e8611a828688613fd5565b614019565b6133ef5760405162461bcd60e51b815260206004820152601c60248201527f6661696c656420746f207472616e736665722061646d696e20666565000000006044820152606401610a32565b6101008401511561346c57613420846060015161339e6103e8611a8288610100015187613fd590919063ffffffff16565b61346c5760405162461bcd60e51b815260206004820152601e60248201527f6661696c656420746f207472616e736665722063726561746f722066656500006044820152606401610a32565b60808401516134859061339e6103e8611a828686613fd5565b6134d15760405162461bcd60e51b815260206004820152601b60248201527f6661696c656420746f207472616e7366657220746f206f776e657200000000006044820152606401610a32565b613812565b82156135e65760c0840151610199546001600160a01b03918216916323b872dd9133911661350a6103e8611a82888a613fd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015613576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359a9190614bd0565b6135e65760405162461bcd60e51b815260206004820152601c60248201527f6661696c656420746f207472616e736665722061646d696e20666565000000006044820152606401610a32565b61010084015115613704578360c001516001600160a01b03166323b872dd3386606001516136286103e8611a828a610100015189613fd590919063ffffffff16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015613694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b89190614bd0565b6137045760405162461bcd60e51b815260206004820152601e60248201527f6661696c656420746f207472616e736665722063726561746f722066656500006044820152606401610a32565b8360c001516001600160a01b03166323b872dd3386608001516137366103e8611a828789613fd590919063ffffffff16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af11580156137a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c69190614bd0565b6138125760405162461bcd60e51b815260206004820152601b60248201527f6661696c656420746f207472616e7366657220746f206f776e657200000000006044820152606401610a32565b6000868152610194602052604090819020600101548582015191517ff242432a00000000000000000000000000000000000000000000000000000000815230600482015233602482015260448101929092526064820187905260a06084830152601b60a48301527f6275792066726f6d20416c74757261204d61726b6574706c616365000000000060c48301526001600160a01b03169063f242432a9060e401600060405180830381600087803b1580156138cc57600080fd5b505af11580156138e0573d6000803e3d6000fd5b50505060008781526101946020526040902060050154613901915086613fc9565b6000878152610194602052604090206005810191909155600901546139269086613aa6565b60008781526101946020526040902060090155610196546139479086613aa6565b610196556101975461395a906001613aa6565b6101975560808481015160008881526101946020908152604091829020600181015460029091015483513381526001600160a01b03958616938101939093528284018c9052931660608201529283019190915260a08201879052517f38367098fb4a75d52361b6c8bda4d52eaeb6dbf04ecb183b39052acd6710bffb9181900360c00190a1505050506113c1600161015f55565b6139f6613ab2565b6001600160a01b038116613a725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a32565b610ffc81613f5e565b6101928181548110613a8c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60006115f38284614c39565b61012d546001600160a01b0316331461160c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a32565b610ffc613ab2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613b485761123283614192565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613bc0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613bbd91810190614bb7565b60015b613c325760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610a32565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613cc75760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610a32565b50611232838383614268565b600054610100900460ff16613d505760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a32565b61160c614293565b600054610100900460ff1661160c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a32565b600054610100900460ff16613e525760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a32565b61160c614319565b600261015f5403613ead5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a32565b600261015f55565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116613f515760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610a32565b919050565b600161015f55565b61012d80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006115f38284614c4c565b60006115f38284614c5f565b60006115f38284614c76565b600081848411156140115760405162461bcd60e51b8152600401610a329190614cb1565b505050900390565b60408051600080825260208201928390529182916001600160a01b03861691859161404391614cc4565b60006040518083038185875af1925050503d8060008114614080576040519150601f19603f3d011682016040523d82523d6000602084013e614085565b606091505b50509050806115f35761019160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156140df57600080fd5b505af11580156140f3573d6000803e3d6000fd5b5050610191546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015260248201899052909116935063a9059cbb925060440190506020604051808303816000875af1158015614166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418a9190614bd0565b9150506109e0565b6001600160a01b0381163b61420f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610a32565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61427183614396565b60008251118061427e5750805b156112325761428d83836143d6565b50505050565b600054610100900460ff166143105760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a32565b61160c33613f5e565b600054610100900460ff16613f565760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a32565b61439f81614192565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6144555760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610a32565b600080846001600160a01b0316846040516144709190614cc4565b600060405180830381855af49150503d80600081146144ab576040519150601f19603f3d011682016040523d82523d6000602084013e6144b0565b606091505b50915091506144d88282604051806060016040528060278152602001614d0a602791396144e1565b95945050505050565b606083156144f05750816115f3565b6115f383838151156145055781518083602001fd5b8060405162461bcd60e51b8152600401610a329190614cb1565b60006020828403121561453157600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146115f357600080fd5b6001600160a01b0381168114610ffc57600080fd5b60008060006060848603121561458b57600080fd5b83359250602084013561459d81614561565b929592945050506040919091013590565b600080604083850312156145c157600080fd5b50508035926020909101359150565b600080604083850312156145e357600080fd5b82356145ee81614561565b946020939093013593505050565b60006020828403121561460e57600080fd5b81356115f381614561565b6000806040838503121561462c57600080fd5b823561463781614561565b9150602083013561464781614561565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156146c8576146c8614652565b604052919050565b600082601f8301126146e157600080fd5b813567ffffffffffffffff8111156146fb576146fb614652565b61472c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614681565b81815284602083860101111561474157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561477157600080fd5b823561477c81614561565b9150602083013567ffffffffffffffff81111561479857600080fd5b6147a4858286016146d0565b9150509250929050565b8015158114610ffc57600080fd5b6000806000606084860312156147d157600080fd5b833567ffffffffffffffff808211156147e957600080fd5b6147f5878388016146d0565b9450602086013591508082111561480b57600080fd5b50614818868287016146d0565b9250506040840135614829816147ae565b809150509250925092565b60006020828403121561484657600080fd5b5035919050565b60008060008060008060c0878903121561486657600080fd5b863561487181614561565b9550602087013594506040870135935060608701359250608087013561489681614561565b915060a08701356148a6816147ae565b809150509295509295509295565b60008060008060008060c087890312156148cd57600080fd5b86356148d881614561565b9550602087013594506040870135935060608701356148f681614561565b9598949750929560808101359460a0909101359350915050565b600082601f83011261492157600080fd5b8135602067ffffffffffffffff82111561493d5761493d614652565b8160051b61494c828201614681565b928352848101820192828101908785111561496657600080fd5b83870192505b848310156149855782358252918301919083019061496c565b979650505050505050565b600080600080600060a086880312156149a857600080fd5b85356149b381614561565b945060208601356149c381614561565b9350604086013567ffffffffffffffff808211156149e057600080fd5b6149ec89838a01614910565b94506060880135915080821115614a0257600080fd5b614a0e89838a01614910565b93506080880135915080821115614a2457600080fd5b50614a31888289016146d0565b9150509295509295909350565b600080600080600060a08688031215614a5657600080fd5b8535614a6181614561565b94506020860135614a7181614561565b93506040860135925060608601359150608086013567ffffffffffffffff811115614a9b57600080fd5b614a31888289016146d0565b60005b83811015614ac2578181015183820152602001614aaa565b50506000910152565b60008151808452614ae3816020860160208601614aa7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a081526000614b2860a0830188614acb565b8281036020840152614b3a8188614acb565b6001600160a01b039687166040850152949095166060830152509015156080909101529392505050565b60006001600160a01b03808816835280871660208401525060a06040830152614b9060a0830186614acb565b8281036060840152614ba28186614acb565b91505082151560808301529695505050505050565b600060208284031215614bc957600080fd5b5051919050565b600060208284031215614be257600080fd5b81516115f3816147ae565b600060208284031215614bff57600080fd5b81516115f381614561565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109e0576109e0614c0a565b818103818111156109e0576109e0614c0a565b80820281158282048414176109e0576109e0614c0a565b600082614cac577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6020815260006115f36020830184614acb565b60008251614cd6818460208701614aa7565b919091019291505056fe68747470733a2f2f6170692e616c747572616e66742e636f6d2f6d6574612f616c747572616e66742f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220aa3b1fac2175e7476c46c482ac79490ef509fd34f8071ad8bb2998688c6477d164736f6c63430008130033