0x60806040526004361061012e5760003560e01c80638803dbee116100ab578063c45a01551161006f578063c45a015514610d95578063d06ca61f14610dd6578063ded9382a14610efa578063e8e3370014610fdc578063f305d719146110c2578063fb3bdb41146111705761018a565b80638803dbee14610a57578063ad5c464814610b70578063ad615dec14610bb1578063af2979eb14610c14578063baa2abde14610cc15761018a565b806338ed1739116100f257806338ed1739146105e55780634a25d94a146106fe5780635b0d5984146108175780637ff36ab5146108f257806385f8c259146109f45761018a565b806302751cec1461018f578063054d50d41461024357806318cbafe5146102a65780631f00ca74146103bf5780632195995c146104e35761018a565b3661018a577f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461018857fe5b005b600080fd5b34801561019b57600080fd5b50610226600480360360c08110156101b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611272565b604051808381526020018281526020019250505060405180910390f35b34801561024f57600080fd5b506102906004803603606081101561026657600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506113cf565b6040518082815260200191505060405180910390f35b3480156102b257600080fd5b50610368600480360360a08110156102c957600080fd5b810190808035906020019092919080359060200190929190803590602001906401000000008111156102fa57600080fd5b82018360208201111561030c57600080fd5b8035906020019184602083028401116401000000008311171561032e57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113e5565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103ab578082015181840152602081019050610390565b505050509050019250505060405180910390f35b3480156103cb57600080fd5b5061048c600480360360408110156103e257600080fd5b81019080803590602001909291908035906020019064010000000081111561040957600080fd5b82018360208201111561041b57600080fd5b8035906020019184602083028401116401000000008311171561043d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061180a565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104cf5780820151818401526020810190506104b4565b505050509050019250505060405180910390f35b3480156104ef57600080fd5b506105c8600480360361016081101561050757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061183f565b604051808381526020018281526020019250505060405180910390f35b3480156105f157600080fd5b506106a7600480360360a081101561060857600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561063957600080fd5b82018360208201111561064b57600080fd5b8035906020019184602083028401116401000000008311171561066d57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611995565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106ea5780820151818401526020810190506106cf565b505050509050019250505060405180910390f35b34801561070a57600080fd5b506107c0600480360360a081101561072157600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561075257600080fd5b82018360208201111561076457600080fd5b8035906020019184602083028401116401000000008311171561078657600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c08565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156108035780820151818401526020810190506107e8565b505050509050019250505060405180910390f35b34801561082357600080fd5b506108dc600480360361014081101561083b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061202a565b6040518082815260200191505060405180910390f35b61099d6004803603608081101561090857600080fd5b81019080803590602001909291908035906020019064010000000081111561092f57600080fd5b82018360208201111561094157600080fd5b8035906020019184602083028401116401000000008311171561096357600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612195565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109e05780820151818401526020810190506109c5565b505050509050019250505060405180910390f35b348015610a0057600080fd5b50610a4160048036036060811015610a1757600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612623565b6040518082815260200191505060405180910390f35b348015610a6357600080fd5b50610b19600480360360a0811015610a7a57600080fd5b81019080803590602001909291908035906020019092919080359060200190640100000000811115610aab57600080fd5b820183602082011115610abd57600080fd5b80359060200191846020830284011164010000000083111715610adf57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612639565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610b5c578082015181840152602081019050610b41565b505050509050019250505060405180910390f35b348015610b7c57600080fd5b50610b856128a9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bbd57600080fd5b50610bfe60048036036060811015610bd457600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506128cd565b6040518082815260200191505060405180910390f35b348015610c2057600080fd5b50610cab600480360360c0811015610c3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128e3565b6040518082815260200191505060405180910390f35b348015610ccd57600080fd5b50610d78600480360360e0811015610ce457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612add565b604051808381526020018281526020019250505060405180910390f35b348015610da157600080fd5b50610daa612e1c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610de257600080fd5b50610ea360048036036040811015610df957600080fd5b810190808035906020019092919080359060200190640100000000811115610e2057600080fd5b820183602082011115610e3257600080fd5b80359060200191846020830284011164010000000083111715610e5457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612e40565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610ee6578082015181840152602081019050610ecb565b505050509050019250505060405180910390f35b348015610f0657600080fd5b50610fbf6004803603610140811015610f1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612e75565b604051808381526020018281526020019250505060405180910390f35b348015610fe857600080fd5b5061109e600480360361010081101561100057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612fe9565b60405180848152602001838152602001828152602001935050505060405180910390f35b61114c600480360360c08110156110d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613178565b60405180848152602001838152602001828152602001935050505060405180910390f35b61121b6004803603608081101561118657600080fd5b8101908080359060200190929190803590602001906401000000008111156111ad57600080fd5b8201836020820111156111bf57600080fd5b803590602001918460208302840111640100000000831117156111e157600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506134a1565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561125e578082015181840152602081019050611243565b505050509050019250505060405180910390f35b60008082428110156112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b61131b897f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd8a8a8a308a612add565b809350819450505061132e898685613969565b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156113a157600080fd5b505af11580156113b5573d6000803e3d6000fd5b505050506113c38583613b4c565b50965096945050505050565b60006113dc848484613cab565b90509392505050565b6060814281101561145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff168686600189899050038181106114a757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f556e69737761705632526f757465723a20494e56414c49445f5041544800000081525060200191505060405180910390fd5b6115b97f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51689888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050613ddb565b915086826001845103815181106115cc57fe5b6020026020010151101561162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151d3602b913960400191505060405180910390fd5b6116f08686600081811061163b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336116d67f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168a8a600081811061168a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b60018181106116b457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613f73565b856000815181106116e357fe5b602002602001015161408c565b61173c82878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505030614271565b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d8360018551038151811061178857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156117c657600080fd5b505af11580156117da573d6000803e3d6000fd5b505050506117ff84836001855103815181106117f257fe5b6020026020010151613b4c565b509695505050505050565b60606118377f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168484614506565b905092915050565b600080600061186f7f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168f8f613f73565b905060008761187e578c6118a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848d8c8c8c6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561195457600080fd5b505af1158015611968573d6000803e3d6000fd5b5050505061197b8f8f8f8f8f8f8f612add565b809450819550505050509b509b9950505050505050505050565b60608142811015611a0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b611a7a7f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51689888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050613ddb565b91508682600184510381518110611a8d57fe5b60200260200101511015611aec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151d3602b913960400191505060405180910390fd5b611bb186866000818110611afc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611b977f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168a8a6000818110611b4b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110611b7557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613f73565b85600081518110611ba457fe5b602002602001015161408c565b611bfd82878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505086614271565b509695505050505050565b60608142811015611c81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff16868660018989905003818110611cca57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f556e69737761705632526f757465723a20494e56414c49445f5041544800000081525060200191505060405180910390fd5b611ddc7f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51689888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050614506565b91508682600081518110611dec57fe5b60200260200101511115611e4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806151636027913960400191505060405180910390fd5b611f1086866000818110611e5b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611ef67f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168a8a6000818110611eaa57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110611ed457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613f73565b85600081518110611f0357fe5b602002602001015161408c565b611f5c82878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505030614271565b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d83600185510381518110611fa857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fe657600080fd5b505af1158015611ffa573d6000803e3d6000fd5b5050505061201f848360018551038151811061201257fe5b6020026020010151613b4c565b509695505050505050565b6000806120787f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168d7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd613f73565b9050600086612087578b6120a9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848c8b8b8b6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561215d57600080fd5b505af1158015612171573d6000803e3d6000fd5b505050506121838d8d8d8d8d8d6128e3565b925050509a9950505050505050505050565b6060814281101561220e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff168686600081811061225257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f556e69737761705632526f757465723a20494e56414c49445f5041544800000081525060200191505060405180910390fd5b6123647f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51634888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050613ddb565b9150868260018451038151811061237757fe5b602002602001015110156123d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151d3602b913960400191505060405180910390fd5b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061241f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561245257600080fd5b505af1158015612466573d6000803e3d6000fd5b50505050507f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6125247f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c516898960008181106124d857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061250257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613f73565b8460008151811061253157fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561258c57600080fd5b505af11580156125a0573d6000803e3d6000fd5b505050506040513d60208110156125b657600080fd5b81019080805190602001909291905050506125cd57fe5b61261982878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505086614271565b5095945050505050565b60006126308484846146a6565b90509392505050565b606081428110156126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b61271e7f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51689888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050614506565b9150868260008151811061272e57fe5b6020026020010151111561278d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806151636027913960400191505060405180910390fd5b6128528686600081811061279d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336128387f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168a8a60008181106127ec57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061281657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613f73565b8560008151811061284557fe5b602002602001015161408c565b61289e82878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505086614271565b509695505050505050565b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd81565b60006128da8484846147e3565b90509392505050565b6000814281101561295c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b61298b887f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd8989893089612add565b905080925050612a3d88858a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b8101908080519060200190929190505050613969565b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612ab057600080fd5b505af1158015612ac4573d6000803e3d6000fd5b50505050612ad28483613b4c565b509695505050505050565b6000808242811015612b57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b6000612b847f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168c8c613f73565b90508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33838c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b505050506040513d6020811015612c3f57600080fd5b8101908080519060200190929190505050506000808273ffffffffffffffffffffffffffffffffffffffff166389afcb44896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015612cbc57600080fd5b505af1158015612cd0573d6000803e3d6000fd5b505050506040513d6040811015612ce657600080fd5b810190808051906020019092919080519060200190929190505050915091506000612d118e8e6148c7565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612d4e578183612d51565b82825b80975081985050508a871015612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061518a6026913960400191505060405180910390fd5b89861015612e0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150f06026913960400191505060405180910390fd5b505050505097509795505050505050565b7f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51681565b6060612e6d7f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168484613ddb565b905092915050565b6000806000612ec57f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168e7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd613f73565b9050600087612ed4578c612ef6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848d8c8c8c6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b158015612faa57600080fd5b505af1158015612fbe573d6000803e3d6000fd5b50505050612fd08e8e8e8e8e8e611272565b809450819550505050509a509a98505050505050505050565b60008060008342811015613065576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b6130738c8c8c8c8c8c614a3e565b809450819550505060006130a87f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168e8e613f73565b90506130b68d33838861408c565b6130c28c33838761408c565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561312b57600080fd5b505af115801561313f573d6000803e3d6000fd5b505050506040513d602081101561315557600080fd5b810190808051906020019092919050505092505050985098509895505050505050565b600080600083428110156131f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b6132228a7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd8b348c8c614a3e565b809450819550505060006132777f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168c7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd613f73565b90506132858b33838861408c565b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156132ed57600080fd5b505af1158015613301573d6000803e3d6000fd5b50505050507f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561339757600080fd5b505af11580156133ab573d6000803e3d6000fd5b505050506040513d60208110156133c157600080fd5b81019080805190602001909291905050506133d857fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561344157600080fd5b505af1158015613455573d6000803e3d6000fd5b505050506040513d602081101561346b57600080fd5b81019080805190602001909291905050509250833411156134935761349233853403613b4c565b5b505096509650969350505050565b6060814281101561351a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e69737761705632526f757465723a2045585049524544000000000000000081525060200191505060405180910390fd5b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff168686600081811061355e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f556e69737761705632526f757465723a20494e56414c49445f5041544800000081525060200191505060405180910390fd5b6136707f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51688888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050614506565b9150348260008151811061368057fe5b602002602001015111156136df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806151636027913960400191505060405180910390fd5b7f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061372857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b50505050507f0000000000000000000000006b3bd0478df0ec4984b168db0e12a539cc0c83cd73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61382d7f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c516898960008181106137e157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061380b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613f73565b8460008151811061383a57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561389557600080fd5b505af11580156138a9573d6000803e3d6000fd5b505050506040513d60208110156138bf57600080fd5b81019080805190602001909291905050506138d657fe5b61392282878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505086614271565b8160008151811061392f57fe5b602002602001015134111561395f5761395e338360008151811061394f57fe5b60200260200101513403613b4c565b5b5095945050505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613a2c5780518252602082019150602081019050602083039250613a09565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a8e576040519150601f19603f3d011682016040523d82523d6000602084013e613a93565b606091505b5091509150818015613ad35750600081511480613ad25750808060200190516020811015613ac057600080fd5b81019080805190602001909291905050505b5b613b45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81118015613b7e57600080fd5b506040519080825280601f01601f191660200182016040528015613bb15781602001600182028036833780820191505090505b506040518082805190602001908083835b60208310613be55780518252602082019150602081019050602083039250613bc2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613c47576040519150601f19603f3d011682016040523d82523d6000602084013e613c4c565b606091505b5050905080613ca6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806151b06023913960400191505060405180910390fd5b505050565b6000808411613d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615222602b913960400191505060405180910390fd5b600083118015613d155750600082115b613d6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151166028913960400191505060405180910390fd5b6000613d816103e386614dfa90919063ffffffff16565b90506000613d988483614dfa90919063ffffffff16565b90506000613dc383613db56103e889614dfa90919063ffffffff16565b614e8f90919063ffffffff16565b9050808281613dce57fe5b0493505050509392505050565b6060600282511015613e55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f556e697377617056324c6962726172793a20494e56414c49445f50415448000081525060200191505060405180910390fd5b815167ffffffffffffffff81118015613e6d57600080fd5b50604051908082528060200260200182016040528015613e9c5781602001602082028036833780820191505090505b5090508281600081518110613ead57fe5b60200260200101818152505060005b6001835103811015613f6b57600080613eff87868581518110613edb57fe5b6020026020010151876001870181518110613ef257fe5b6020026020010151614f12565b6dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150613f41848481518110613f3257fe5b60200260200101518383613cab565b846001850181518110613f5057fe5b60200260200101818152505050508080600101915050613ebc565b509392505050565b6000806000613f8285856148c7565b91509150858282604051602001808373ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060405160200180807fff000000000000000000000000000000000000000000000000000000000000008152506001018373ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001807f31569a4f51bf24f7279d30c2f96e41fb0383b75ccdcb1f512f4f2d23e9a6384e815250602001925050506040516020818303038152906040528051906020012060001c925050509392505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061416d578051825260208201915060208101905060208303925061414a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146141cf576040519150601f19603f3d011682016040523d82523d6000602084013e6141d4565b606091505b50915091508180156142145750600081511480614213575080806020019051602081101561420157600080fd5b81019080805190602001909291905050505b5b614269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806151fe6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156145005760008084838151811061428f57fe5b60200260200101518560018501815181106142a657fe5b60200260200101519150915060006142be83836148c7565b50905060008760018601815181106142d257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461431a5782600061431e565b6000835b91509150600060028a510388106143355788614377565b6143767f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c516878c60028c018151811061436957fe5b6020026020010151613f73565b5b90506143a47f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168888613f73565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f848484600067ffffffffffffffff811180156143da57600080fd5b506040519080825280601f01601f19166020018201604052801561440d5781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561448557808201518184015260208101905061446a565b50505050905090810190601f1680156144b25780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156144d457600080fd5b505af11580156144e8573d6000803e3d6000fd5b50505050505050505050508080600101915050614274565b50505050565b6060600282511015614580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f556e697377617056324c6962726172793a20494e56414c49445f50415448000081525060200191505060405180910390fd5b815167ffffffffffffffff8111801561459857600080fd5b506040519080825280602002602001820160405280156145c75781602001602082028036833780820191505090505b50905082816001835103815181106145db57fe5b6020026020010181815250506000600183510390505b600081111561469e576000806146318786600186038151811061461057fe5b602002602001015187868151811061462457fe5b6020026020010151614f12565b6dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915061467384848151811061466457fe5b602002602001015183836146a6565b84600185038151811061468257fe5b60200260200101818152505050508080600190039150506145f1565b509392505050565b6000808411614700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061509f602c913960400191505060405180910390fd5b6000831180156147105750600082115b614765576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151166028913960400191505060405180910390fd5b600061478e6103e86147808787614dfa90919063ffffffff16565b614dfa90919063ffffffff16565b905060006147b96103e36147ab888761501b90919063ffffffff16565b614dfa90919063ffffffff16565b90506147d860018284816147c957fe5b04614e8f90919063ffffffff16565b925050509392505050565b600080841161483d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061513e6025913960400191505060405180910390fd5b60008311801561484d5750600082115b6148a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151166028913960400191505060405180910390fd5b826148b68386614dfa90919063ffffffff16565b816148bd57fe5b0490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561494f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806150cb6025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061498957828461498c565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614a37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f556e697377617056324c6962726172793a205a45524f5f41444452455353000081525060200191505060405180910390fd5b9250929050565b600080600073ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51673ffffffffffffffffffffffffffffffffffffffff1663e6a439058a8a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015614afe57600080fd5b505afa158015614b12573d6000803e3d6000fd5b505050506040513d6020811015614b2857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415614c39577f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c51673ffffffffffffffffffffffffffffffffffffffff1663c9c6539689896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015614bfc57600080fd5b505af1158015614c10573d6000803e3d6000fd5b505050506040513d6020811015614c2657600080fd5b8101908080519060200190929190505050505b600080614c677f0000000000000000000000009d045f9baa77769986871d8e3dd83b2693a1c5168b8b614f12565b915091506000826dffffffffffffffffffffffffffff16148015614c9b57506000816dffffffffffffffffffffffffffff16145b15614caf5787878094508195505050614ded565b6000614cdc89846dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff166147e3565b9050878111614d4d5785811015614d3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150f06026913960400191505060405180910390fd5b88818095508196505050614deb565b6000614d7a89846dffffffffffffffffffffffffffff16866dffffffffffffffffffffffffffff166147e3565b905089811115614d8657fe5b87811015614ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061518a6026913960400191505060405180910390fd5b80898096508197505050505b505b5050965096945050505050565b600080821480614e175750828283850292508281614e1457fe5b04145b614e89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284019150811015614f0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000806000614f2185856148c7565b509050600080614f32888888613f73565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614f7757600080fd5b505afa158015614f8b573d6000803e3d6000fd5b505050506040513d6060811015614fa157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505050915091508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614615005578082615008565b81815b8095508196505050505050935093915050565b6000828284039150811115615098576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b9291505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220464cd7e9349a8b398c2e1cf312203ea5fe599840c82473782ad7850a0c4b15f464736f6c634300060c0033