@gooddollar/goodcollective-contracts 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/contracts/DirectPayments/DirectPaymentsFactory.sol +12 -7
  2. package/contracts/DirectPayments/DirectPaymentsLibrary.sol +54 -0
  3. package/contracts/DirectPayments/DirectPaymentsPool.sol +13 -38
  4. package/contracts/GoodCollective/GoodCollectiveSuperApp.sol +65 -13
  5. package/contracts/GoodCollective/IGoodCollectiveSuperApp.sol +6 -0
  6. package/contracts/Interfaces.sol +25 -0
  7. package/contracts/UBI/UBIPool.sol +76 -75
  8. package/contracts/UBI/UBIPoolFactory.sol +15 -10
  9. package/contracts/utils/HelperLibrary.sol +56 -23
  10. package/package.json +1 -1
  11. package/releases/deployment.json +4836 -3746
  12. package/typechain-types/contracts/DirectPayments/DirectPaymentsFactory.ts +16 -4
  13. package/typechain-types/contracts/DirectPayments/DirectPaymentsPool.sol/DirectPaymentsPool.ts +138 -9
  14. package/typechain-types/contracts/GoodCollective/GoodCollectiveSuperApp.ts +101 -6
  15. package/typechain-types/contracts/{DirectPayments/DirectPaymentsFactory.sol/IRegistry.ts → GoodCollective/IGoodCollectiveSuperApp.sol/IGoodCollectiveSuperApp.ts} +18 -27
  16. package/typechain-types/contracts/GoodCollective/IGoodCollectiveSuperApp.sol/index.ts +1 -0
  17. package/typechain-types/contracts/{UBI/UBIPool.sol → Interfaces.sol}/IIdentityV2.ts +1 -1
  18. package/typechain-types/contracts/{UBI/UBIPool.sol → Interfaces.sol}/IMembersValidator.ts +1 -1
  19. package/typechain-types/contracts/{UBI/UBIPool.sol → Interfaces.sol}/index.ts +0 -1
  20. package/typechain-types/contracts/UBI/{UBIPool.sol/UBIPool.ts → UBIPool.ts} +239 -47
  21. package/typechain-types/contracts/UBI/UBIPoolFactory.ts +58 -34
  22. package/typechain-types/contracts/UBI/index.ts +1 -2
  23. package/typechain-types/contracts/index.ts +2 -0
  24. package/typechain-types/contracts/utils/HelperLibrary.ts +46 -4
  25. package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsFactory__factory.ts +11 -1
  26. package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsPool.sol/DirectPaymentsPool__factory.ts +72 -1
  27. package/typechain-types/factories/contracts/GoodCollective/GoodCollectiveSuperApp__factory.ts +48 -0
  28. package/typechain-types/factories/contracts/{DirectPayments/DirectPaymentsFactory.sol/IRegistry__factory.ts → GoodCollective/IGoodCollectiveSuperApp.sol/IGoodCollectiveSuperApp__factory.ts} +19 -23
  29. package/typechain-types/factories/contracts/GoodCollective/IGoodCollectiveSuperApp.sol/index.ts +1 -0
  30. package/typechain-types/factories/contracts/{UBI/UBIPool.sol → Interfaces.sol}/IIdentityV2__factory.ts +1 -1
  31. package/typechain-types/factories/contracts/{UBI/UBIPool.sol → Interfaces.sol}/IMembersValidator__factory.ts +1 -1
  32. package/typechain-types/factories/contracts/{UBI/UBIPool.sol → Interfaces.sol}/index.ts +0 -1
  33. package/typechain-types/factories/contracts/UBI/UBIPoolFactory__factory.ts +51 -7
  34. package/typechain-types/factories/contracts/UBI/UBIPool__factory.ts +2052 -0
  35. package/typechain-types/factories/contracts/UBI/index.ts +1 -1
  36. package/typechain-types/factories/contracts/index.ts +1 -0
  37. package/typechain-types/factories/contracts/test/HelperLibraryTest__factory.ts +1 -1
  38. package/typechain-types/factories/contracts/utils/HelperLibrary__factory.ts +31 -1
  39. package/typechain-types/hardhat.d.ts +18 -9
  40. package/typechain-types/index.ts +4 -2
  41. package/typechain-types/contracts/DirectPayments/DirectPaymentsFactory.sol/DirectPaymentsFactory.ts +0 -1327
  42. package/typechain-types/contracts/DirectPayments/DirectPaymentsFactory.sol/index.ts +0 -5
  43. package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsFactory.sol/DirectPaymentsFactory__factory.ts +0 -1004
  44. package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsFactory.sol/index.ts +0 -5
  45. package/typechain-types/factories/contracts/UBI/UBIPool.sol/UBIPool__factory.ts +0 -1916
@@ -28,28 +28,28 @@ import type {
28
28
  PromiseOrValue,
29
29
  } from "../../common";
30
30
 
31
- export declare namespace UBIPool {
32
- export type PoolSettingsStruct = {
33
- manager: PromiseOrValue<string>;
34
- membersValidator: PromiseOrValue<string>;
35
- uniquenessValidator: PromiseOrValue<string>;
36
- rewardToken: PromiseOrValue<string>;
37
- };
38
-
39
- export type PoolSettingsStructOutput = [string, string, string, string] & {
40
- manager: string;
41
- membersValidator: string;
42
- uniquenessValidator: string;
43
- rewardToken: string;
44
- };
31
+ export type PoolSettingsStruct = {
32
+ manager: PromiseOrValue<string>;
33
+ membersValidator: PromiseOrValue<string>;
34
+ uniquenessValidator: PromiseOrValue<string>;
35
+ rewardToken: PromiseOrValue<string>;
36
+ };
37
+
38
+ export type PoolSettingsStructOutput = [string, string, string, string] & {
39
+ manager: string;
40
+ membersValidator: string;
41
+ uniquenessValidator: string;
42
+ rewardToken: string;
43
+ };
45
44
 
45
+ export declare namespace UBIPool {
46
46
  export type UBISettingsStruct = {
47
47
  cycleLengthDays: PromiseOrValue<BigNumberish>;
48
48
  claimPeriodDays: PromiseOrValue<BigNumberish>;
49
49
  minActiveUsers: PromiseOrValue<BigNumberish>;
50
50
  claimForEnabled: PromiseOrValue<boolean>;
51
51
  maxClaimAmount: PromiseOrValue<BigNumberish>;
52
- maxClaimers: PromiseOrValue<BigNumberish>;
52
+ maxMembers: PromiseOrValue<BigNumberish>;
53
53
  onlyMembers: PromiseOrValue<boolean>;
54
54
  };
55
55
 
@@ -67,9 +67,21 @@ export declare namespace UBIPool {
67
67
  minActiveUsers: number;
68
68
  claimForEnabled: boolean;
69
69
  maxClaimAmount: BigNumber;
70
- maxClaimers: number;
70
+ maxMembers: number;
71
71
  onlyMembers: boolean;
72
72
  };
73
+
74
+ export type ExtendedSettingsStruct = {
75
+ maxPeriodClaimers: PromiseOrValue<BigNumberish>;
76
+ minClaimAmount: PromiseOrValue<BigNumberish>;
77
+ managerFeeBps: PromiseOrValue<BigNumberish>;
78
+ };
79
+
80
+ export type ExtendedSettingsStructOutput = [number, BigNumber, number] & {
81
+ maxPeriodClaimers: number;
82
+ minClaimAmount: BigNumber;
83
+ managerFeeBps: number;
84
+ };
73
85
  }
74
86
 
75
87
  export interface UBIPoolFactoryInterface extends utils.Interface {
@@ -77,8 +89,8 @@ export interface UBIPoolFactoryInterface extends utils.Interface {
77
89
  "DEFAULT_ADMIN_ROLE()": FunctionFragment;
78
90
  "addMember(address)": FunctionFragment;
79
91
  "changePoolDetails(address,string)": FunctionFragment;
80
- "createManagedPool(string,string,(address,address,address,address),(uint32,uint32,uint32,bool,uint256,uint32,bool))": FunctionFragment;
81
- "createPool(string,string,(address,address,address,address),(uint32,uint32,uint32,bool,uint256,uint32,bool))": FunctionFragment;
92
+ "createManagedPool(string,string,(address,address,address,address),(uint32,uint32,uint32,bool,uint256,uint32,bool),(uint32,uint256,uint32))": FunctionFragment;
93
+ "createPool(string,string,(address,address,address,address),(uint32,uint32,uint32,bool,uint256,uint32,bool),(uint32,uint256,uint32))": FunctionFragment;
82
94
  "feeBps()": FunctionFragment;
83
95
  "feeRecipient()": FunctionFragment;
84
96
  "getMemberPools(address)": FunctionFragment;
@@ -151,8 +163,9 @@ export interface UBIPoolFactoryInterface extends utils.Interface {
151
163
  values: [
152
164
  PromiseOrValue<string>,
153
165
  PromiseOrValue<string>,
154
- UBIPool.PoolSettingsStruct,
155
- UBIPool.UBISettingsStruct
166
+ PoolSettingsStruct,
167
+ UBIPool.UBISettingsStruct,
168
+ UBIPool.ExtendedSettingsStruct
156
169
  ]
157
170
  ): string;
158
171
  encodeFunctionData(
@@ -160,8 +173,9 @@ export interface UBIPoolFactoryInterface extends utils.Interface {
160
173
  values: [
161
174
  PromiseOrValue<string>,
162
175
  PromiseOrValue<string>,
163
- UBIPool.PoolSettingsStruct,
164
- UBIPool.UBISettingsStruct
176
+ PoolSettingsStruct,
177
+ UBIPool.UBISettingsStruct,
178
+ UBIPool.ExtendedSettingsStruct
165
179
  ]
166
180
  ): string;
167
181
  encodeFunctionData(functionFragment: "feeBps", values?: undefined): string;
@@ -381,7 +395,7 @@ export interface PoolCreatedEventObject {
381
395
  pool: string;
382
396
  projectId: string;
383
397
  ipfs: string;
384
- poolSettings: UBIPool.PoolSettingsStructOutput;
398
+ poolSettings: PoolSettingsStructOutput;
385
399
  poolLimits: UBIPool.UBISettingsStructOutput;
386
400
  }
387
401
  export type PoolCreatedEvent = TypedEvent<
@@ -389,7 +403,7 @@ export type PoolCreatedEvent = TypedEvent<
389
403
  string,
390
404
  string,
391
405
  string,
392
- UBIPool.PoolSettingsStructOutput,
406
+ PoolSettingsStructOutput,
393
407
  UBIPool.UBISettingsStructOutput
394
408
  ],
395
409
  PoolCreatedEventObject
@@ -515,16 +529,18 @@ export interface UBIPoolFactory extends BaseContract {
515
529
  createManagedPool(
516
530
  _projectId: PromiseOrValue<string>,
517
531
  _ipfs: PromiseOrValue<string>,
518
- _settings: UBIPool.PoolSettingsStruct,
532
+ _settings: PoolSettingsStruct,
519
533
  _limits: UBIPool.UBISettingsStruct,
534
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
520
535
  overrides?: Overrides & { from?: PromiseOrValue<string> }
521
536
  ): Promise<ContractTransaction>;
522
537
 
523
538
  createPool(
524
539
  _projectId: PromiseOrValue<string>,
525
540
  _ipfs: PromiseOrValue<string>,
526
- _settings: UBIPool.PoolSettingsStruct,
541
+ _settings: PoolSettingsStruct,
527
542
  _limits: UBIPool.UBISettingsStruct,
543
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
528
544
  overrides?: Overrides & { from?: PromiseOrValue<string> }
529
545
  ): Promise<ContractTransaction>;
530
546
 
@@ -660,16 +676,18 @@ export interface UBIPoolFactory extends BaseContract {
660
676
  createManagedPool(
661
677
  _projectId: PromiseOrValue<string>,
662
678
  _ipfs: PromiseOrValue<string>,
663
- _settings: UBIPool.PoolSettingsStruct,
679
+ _settings: PoolSettingsStruct,
664
680
  _limits: UBIPool.UBISettingsStruct,
681
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
665
682
  overrides?: Overrides & { from?: PromiseOrValue<string> }
666
683
  ): Promise<ContractTransaction>;
667
684
 
668
685
  createPool(
669
686
  _projectId: PromiseOrValue<string>,
670
687
  _ipfs: PromiseOrValue<string>,
671
- _settings: UBIPool.PoolSettingsStruct,
688
+ _settings: PoolSettingsStruct,
672
689
  _limits: UBIPool.UBISettingsStruct,
690
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
673
691
  overrides?: Overrides & { from?: PromiseOrValue<string> }
674
692
  ): Promise<ContractTransaction>;
675
693
 
@@ -805,16 +823,18 @@ export interface UBIPoolFactory extends BaseContract {
805
823
  createManagedPool(
806
824
  _projectId: PromiseOrValue<string>,
807
825
  _ipfs: PromiseOrValue<string>,
808
- _settings: UBIPool.PoolSettingsStruct,
826
+ _settings: PoolSettingsStruct,
809
827
  _limits: UBIPool.UBISettingsStruct,
828
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
810
829
  overrides?: CallOverrides
811
830
  ): Promise<string>;
812
831
 
813
832
  createPool(
814
833
  _projectId: PromiseOrValue<string>,
815
834
  _ipfs: PromiseOrValue<string>,
816
- _settings: UBIPool.PoolSettingsStruct,
835
+ _settings: PoolSettingsStruct,
817
836
  _limits: UBIPool.UBISettingsStruct,
837
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
818
838
  overrides?: CallOverrides
819
839
  ): Promise<string>;
820
840
 
@@ -1050,16 +1070,18 @@ export interface UBIPoolFactory extends BaseContract {
1050
1070
  createManagedPool(
1051
1071
  _projectId: PromiseOrValue<string>,
1052
1072
  _ipfs: PromiseOrValue<string>,
1053
- _settings: UBIPool.PoolSettingsStruct,
1073
+ _settings: PoolSettingsStruct,
1054
1074
  _limits: UBIPool.UBISettingsStruct,
1075
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
1055
1076
  overrides?: Overrides & { from?: PromiseOrValue<string> }
1056
1077
  ): Promise<BigNumber>;
1057
1078
 
1058
1079
  createPool(
1059
1080
  _projectId: PromiseOrValue<string>,
1060
1081
  _ipfs: PromiseOrValue<string>,
1061
- _settings: UBIPool.PoolSettingsStruct,
1082
+ _settings: PoolSettingsStruct,
1062
1083
  _limits: UBIPool.UBISettingsStruct,
1084
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
1063
1085
  overrides?: Overrides & { from?: PromiseOrValue<string> }
1064
1086
  ): Promise<BigNumber>;
1065
1087
 
@@ -1192,16 +1214,18 @@ export interface UBIPoolFactory extends BaseContract {
1192
1214
  createManagedPool(
1193
1215
  _projectId: PromiseOrValue<string>,
1194
1216
  _ipfs: PromiseOrValue<string>,
1195
- _settings: UBIPool.PoolSettingsStruct,
1217
+ _settings: PoolSettingsStruct,
1196
1218
  _limits: UBIPool.UBISettingsStruct,
1219
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
1197
1220
  overrides?: Overrides & { from?: PromiseOrValue<string> }
1198
1221
  ): Promise<PopulatedTransaction>;
1199
1222
 
1200
1223
  createPool(
1201
1224
  _projectId: PromiseOrValue<string>,
1202
1225
  _ipfs: PromiseOrValue<string>,
1203
- _settings: UBIPool.PoolSettingsStruct,
1226
+ _settings: PoolSettingsStruct,
1204
1227
  _limits: UBIPool.UBISettingsStruct,
1228
+ _extendedSettings: UBIPool.ExtendedSettingsStruct,
1205
1229
  overrides?: Overrides & { from?: PromiseOrValue<string> }
1206
1230
  ): Promise<PopulatedTransaction>;
1207
1231
 
@@ -1,6 +1,5 @@
1
1
  /* Autogenerated file. Do not edit manually. */
2
2
  /* tslint:disable */
3
3
  /* eslint-disable */
4
- import type * as ubiPoolSol from "./UBIPool.sol";
5
- export type { ubiPoolSol };
4
+ export type { UBIPool } from "./UBIPool";
6
5
  export type { UBIPoolFactory } from "./UBIPoolFactory";
@@ -5,6 +5,8 @@ import type * as directPayments from "./DirectPayments";
5
5
  export type { directPayments };
6
6
  import type * as goodCollective from "./GoodCollective";
7
7
  export type { goodCollective };
8
+ import type * as interfacesSol from "./Interfaces.sol";
9
+ export type { interfacesSol };
8
10
  import type * as ubi from "./UBI";
9
11
  export type { ubi };
10
12
  import type * as test from "./test";
@@ -28,6 +28,9 @@ export declare namespace IGoodCollectiveSuperApp {
28
28
  lastUpdate: PromiseOrValue<BigNumberish>;
29
29
  lastFeeRecipient: PromiseOrValue<string>;
30
30
  lastIncomeRate: PromiseOrValue<BigNumberish>;
31
+ lastManagerFeeRecipient: PromiseOrValue<string>;
32
+ protocolFees: PromiseOrValue<BigNumberish>;
33
+ managerFees: PromiseOrValue<BigNumberish>;
31
34
  };
32
35
 
33
36
  export type StatsStructOutput = [
@@ -35,6 +38,9 @@ export declare namespace IGoodCollectiveSuperApp {
35
38
  BigNumber,
36
39
  BigNumber,
37
40
  string,
41
+ BigNumber,
42
+ string,
43
+ BigNumber,
38
44
  BigNumber
39
45
  ] & {
40
46
  netIncome: BigNumber;
@@ -42,12 +48,15 @@ export declare namespace IGoodCollectiveSuperApp {
42
48
  lastUpdate: BigNumber;
43
49
  lastFeeRecipient: string;
44
50
  lastIncomeRate: BigNumber;
51
+ lastManagerFeeRecipient: string;
52
+ protocolFees: BigNumber;
53
+ managerFees: BigNumber;
45
54
  };
46
55
  }
47
56
 
48
57
  export interface HelperLibraryInterface extends utils.Interface {
49
58
  functions: {
50
- "getRealtimeStats((uint256,uint256,uint256,address,int96),ISuperToken)": FunctionFragment;
59
+ "getRealtimeStats((uint256,uint256,uint256,address,int96,address,uint256,uint256),ISuperToken)": FunctionFragment;
51
60
  };
52
61
 
53
62
  getFunction(nameOrSignatureOrTopic: "getRealtimeStats"): FunctionFragment;
@@ -97,11 +106,22 @@ export interface HelperLibrary extends BaseContract {
97
106
  superToken: PromiseOrValue<string>,
98
107
  overrides?: CallOverrides
99
108
  ): Promise<
100
- [BigNumber, BigNumber, BigNumber, BigNumber] & {
109
+ [
110
+ BigNumber,
111
+ BigNumber,
112
+ BigNumber,
113
+ BigNumber,
114
+ BigNumber,
115
+ BigNumber,
116
+ BigNumber
117
+ ] & {
101
118
  netIncome: BigNumber;
102
119
  totalFees: BigNumber;
120
+ protocolFees: BigNumber;
121
+ managerFees: BigNumber;
103
122
  incomeFlowRate: BigNumber;
104
123
  feeRate: BigNumber;
124
+ managerFeeRate: BigNumber;
105
125
  }
106
126
  >;
107
127
  };
@@ -111,11 +131,22 @@ export interface HelperLibrary extends BaseContract {
111
131
  superToken: PromiseOrValue<string>,
112
132
  overrides?: CallOverrides
113
133
  ): Promise<
114
- [BigNumber, BigNumber, BigNumber, BigNumber] & {
134
+ [
135
+ BigNumber,
136
+ BigNumber,
137
+ BigNumber,
138
+ BigNumber,
139
+ BigNumber,
140
+ BigNumber,
141
+ BigNumber
142
+ ] & {
115
143
  netIncome: BigNumber;
116
144
  totalFees: BigNumber;
145
+ protocolFees: BigNumber;
146
+ managerFees: BigNumber;
117
147
  incomeFlowRate: BigNumber;
118
148
  feeRate: BigNumber;
149
+ managerFeeRate: BigNumber;
119
150
  }
120
151
  >;
121
152
 
@@ -125,11 +156,22 @@ export interface HelperLibrary extends BaseContract {
125
156
  superToken: PromiseOrValue<string>,
126
157
  overrides?: CallOverrides
127
158
  ): Promise<
128
- [BigNumber, BigNumber, BigNumber, BigNumber] & {
159
+ [
160
+ BigNumber,
161
+ BigNumber,
162
+ BigNumber,
163
+ BigNumber,
164
+ BigNumber,
165
+ BigNumber,
166
+ BigNumber
167
+ ] & {
129
168
  netIncome: BigNumber;
130
169
  totalFees: BigNumber;
170
+ protocolFees: BigNumber;
171
+ managerFees: BigNumber;
131
172
  incomeFlowRate: BigNumber;
132
173
  feeRate: BigNumber;
174
+ managerFeeRate: BigNumber;
133
175
  }
134
176
  >;
135
177
  };
@@ -431,6 +431,11 @@ const _abi = [
431
431
  name: "_limits",
432
432
  type: "tuple",
433
433
  },
434
+ {
435
+ internalType: "uint32",
436
+ name: "_managerFeeBps",
437
+ type: "uint32",
438
+ },
434
439
  ],
435
440
  name: "createBeaconPool",
436
441
  outputs: [
@@ -524,6 +529,11 @@ const _abi = [
524
529
  name: "_limits",
525
530
  type: "tuple",
526
531
  },
532
+ {
533
+ internalType: "uint32",
534
+ name: "_managerFeeBps",
535
+ type: "uint32",
536
+ },
527
537
  ],
528
538
  name: "createPool",
529
539
  outputs: [
@@ -950,7 +960,7 @@ const _abi = [
950
960
  ] as const;
951
961
 
952
962
  const _bytecode =
953
- "0x60a06040523060805234801561001457600080fd5b50608051613f8561004c600039600081816109af015281816109f201528181610a8301528181610ac60152610cb00152613f856000f3fe608060405260043610620001645760003560e01c806301ffc9a71462000169578063038defd714620001a35780630b1ca49a14620001d9578063248a9ca3146200020057806324a9d85314620002345780632f2ff15d146200026957806336568abe146200028e5780633659cfe614620002b35780634690484014620002d857806347ccca0214620003095780634f1ef286146200032b5780634f962c8c146200034257806352d1902d1462000367578063545d6299146200037f57806357b7076714620003a4578063592f7b0514620003c95780638abf607714620003ef57806391d148541462000411578063952d3ea114620004365780639cedd89b146200045b5780639cf5c6131462000495578063a217fddf14620004ba578063ac4afa3814620004d1578063ca6d56dc14620004f6578063d547741f146200051b578063e9e50b041462000540578063f8a2334c1462000565578063fcf1e009146200058a575b600080fd5b3480156200017657600080fd5b506200018e6200018836600462002147565b620005af565b60405190151581526020015b60405180910390f35b348015620001b057600080fd5b50620001c8620001c23660046200219b565b620005e7565b6040516200019a939291906200220f565b348015620001e657600080fd5b50620001fe620001f83660046200219b565b62000732565b005b3480156200020d57600080fd5b50620002256200021f3660046200224a565b620008e7565b6040519081526020016200019a565b3480156200024157600080fd5b5060ff546200025a90600160a01b900463ffffffff1681565b6040516200019a919062002264565b3480156200027657600080fd5b50620001fe6200028836600462002275565b620008fc565b3480156200029b57600080fd5b50620001fe620002ad36600462002275565b62000923565b348015620002c057600080fd5b50620001fe620002d23660046200219b565b620009a5565b348015620002e557600080fd5b5060ff54620002fa906001600160a01b031681565b6040516200019a9190620022b5565b3480156200031657600080fd5b5060fc54620002fa906001600160a01b031681565b620001fe6200033c3660046200239b565b62000a79565b3480156200034f57600080fd5b50620001fe6200036136600462002428565b62000b3a565b3480156200037457600080fd5b506200022562000ca3565b3480156200038c57600080fd5b50620002fa6200039e36600462002627565b62000d54565b348015620003b157600080fd5b50620002fa620003c33660046200279a565b62000e96565b348015620003d657600080fd5b5060fc546200025a90600160a01b900463ffffffff1681565b348015620003fc57600080fd5b5060fb54620002fa906001600160a01b031681565b3480156200041e57600080fd5b506200018e6200043036600462002275565b62000ed0565b3480156200044357600080fd5b50620002fa6200045536600462002627565b62000efb565b3480156200046857600080fd5b50620002fa6200047a3660046200224a565b60fe602052600090815260409020546001600160a01b031681565b348015620004a257600080fd5b50620001fe620004b4366004620027c9565b62001032565b348015620004c757600080fd5b5062000225600081565b348015620004de57600080fd5b50620002fa620004f03660046200224a565b6200109b565b3480156200050357600080fd5b50620001fe620005153660046200219b565b620010c7565b3480156200052857600080fd5b50620001fe6200053a36600462002275565b62001143565b3480156200054d57600080fd5b50620001fe6200055f366004620027fc565b62001165565b3480156200057257600080fd5b50620001fe6200058436600462002836565b620011b2565b3480156200059757600080fd5b50620001fe620005a93660046200219b565b62001380565b60006001600160e01b03198216637965db0b60e01b1480620005e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60fd602052600090815260409020805481906200060490620028ae565b80601f01602080910402602001604051908101604052809291908181526020018280546200063290620028ae565b8015620006835780601f10620006575761010080835404028352916020019162000683565b820191906000526020600020905b8154815290600101906020018083116200066557829003601f168201915b5050506001840154600285018054949560ff909216949193509150620006a990620028ae565b80601f0160208091040260200160405190810160405280929190818152602001828054620006d790620028ae565b8015620007285780601f10620006fc5761010080835404028352916020019162000728565b820191906000526020600020905b8154815290600101906020018083116200070a57829003601f168201915b5050505050905083565b33600090815260fd6020526040902060020180546200075190620028ae565b90506000036200077457604051630cc15fbb60e11b815260040160405180910390fd5b60005b6001600160a01b03821660009081526101006020526040902054811015620008e3576001600160a01b038216600090815261010060205260409020805433919083908110620007ca57620007ca620028ea565b6000918252602090912001546001600160a01b031603620008ce576001600160a01b03821660009081526101006020526040902080546200080e9060019062002916565b81548110620008215762000821620028ea565b60009182526020808320909101546001600160a01b0385811684526101009092526040909220805491909216919083908110620008625762000862620028ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815261010090915260409020805480620008ab57620008ab6200292c565b600082815260209020810160001990810180546001600160a01b03191690550190555b80620008da8162002942565b91505062000777565b5050565b60009081526065602052604090206001015490565b6200090782620008e7565b62000912816200142b565b6200091e838362001437565b505050565b6001600160a01b0381163314620009995760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b620008e38282620014c1565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003620009f05760405162461bcd60e51b815260040162000990906200295e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662000a246200152b565b6001600160a01b03161462000a4d5760405162461bcd60e51b8152600401620009909062002999565b62000a588162001548565b6040805160008082526020820190925262000a769183919062001555565b50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300362000ac45760405162461bcd60e51b815260040162000990906200295e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662000af86200152b565b6001600160a01b03161462000b215760405162461bcd60e51b8152600401620009909062002999565b62000b2c8262001548565b620008e38282600162001555565b81806001600160a01b03166391d14854826001600160a01b031663a217fddf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000baf9190620029d4565b336040518363ffffffff1660e01b815260040162000bcf929190620029ee565b602060405180830381865afa15801562000bed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c13919062002a05565b151560000362000c3657604051631d799a6d60e21b815260040160405180910390fd5b6001600160a01b038316600090815260fd6020526040902062000c5a838262002a6f565b50826001600160a01b03167f941ad6ac0538b96f9e89b9b52ec11031b50591baa2f16c0cdf1f94c69f389d6d8360405162000c96919062002b3b565b60405180910390a2505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161462000d405760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b606482015260840162000990565b5060008051602062003f0983398151915290565b8351602080860191909120600090815260fe909152604081205485906001600160a01b0316801562000e7b57806001600160a01b03166391d14854826001600160a01b031663a217fddf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000dce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000df49190620029d4565b336040518363ffffffff1660e01b815260040162000e14929190620029ee565b602060405180830381865afa15801562000e32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e58919062002a05565b151560000362000e7b57604051631d799a6d60e21b815260040160405180910390fd5b62000e8b878787876001620016cd565b979650505050505050565b610100602052816000526040600020818154811062000eb457600080fd5b6000918252602090912001546001600160a01b03169150829050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b8351602080860191909120600090815260fe909152604081205485906001600160a01b031680156200102257806001600160a01b03166391d14854826001600160a01b031663a217fddf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f75573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f9b9190620029d4565b336040518363ffffffff1660e01b815260040162000fbb929190620029ee565b602060405180830381865afa15801562000fd9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fff919062002a05565b15156000036200102257604051631d799a6d60e21b815260040160405180910390fd5b62000e8b878787876000620016cd565b60006200103f816200142b565b6001600160a01b038316600081815260fd6020908152604091829020600101805460ff191686151590811790915591519182527fafdc942e2e075abc791516f168aed9293862095eb31c0dab19c8d0d061018a93910162000c96565b6101018181548110620010ad57600080fd5b6000918252602090912001546001600160a01b0316905081565b33600090815260fd602052604090206002018054620010e690620028ae565b90506000036200110957604051630cc15fbb60e11b815260040160405180910390fd5b6001600160a01b03166000908152610100602090815260408220805460018101825590835291200180546001600160a01b03191633179055565b6200114e82620008e7565b62001159816200142b565b6200091e8383620014c1565b600062001172816200142b565b5060ff80546001600160a01b039093166001600160a01b031963ffffffff909316600160a01b02929092166001600160c01b031990931692909217179055565b600054610100900460ff1615808015620011d35750600054600160ff909116105b80620011f85750620011e53062001c78565b158015620011f8575060005460ff166001145b6200125d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000990565b6000805460ff19166001179055801562001281576000805461ff0019166101001790555b60fc805463ffffffff60a01b1916600160a01b1790556040518590620012a7906200211d565b620012b39190620022b5565b604051809103906000f080158015620012d0573d6000803e3d6000fd5b5060fb80546001600160a01b03199081166001600160a01b039384161790915560fc805490911686831617905560ff80549185166001600160c01b031990921691909117600160a01b63ffffffff8516021790556200133160008762001c87565b801562001378576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60006200138d816200142b565b60fb54604051631b2ce7f360e11b81526001600160a01b0390911690633659cfe690620013bf908590600401620022b5565b600060405180830381600087803b158015620013da57600080fd5b505af1158015620013ef573d6000803e3d6000fd5b50506040516001600160a01b03851692507f71ce7583e9b7e543de8a69a6af369c0b3528b287064f9dce26a38025e36dc2c79150600090a25050565b62000a76813362001c93565b62001443828262000ed0565b620008e35760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200147d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b620014cd828262000ed0565b15620008e35760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008051602062003f09833981519152546001600160a01b031690565b6000620008e3816200142b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156200158b576200091e8362001cf7565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015620015e8575060408051601f3d908101601f19168201909252620015e591810190620029d4565b60015b6200164d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840162000990565b60008051602062003f098339815191528114620016bf5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840162000990565b506200091e83838362001d96565b60fc5463ffffffff600160a01b8204168452604051600091829162001705916001600160a01b03169087908790309060240162002c95565b60408051601f198184030181529190526020810180516001600160e01b0316635ea4cef760e11b179052905082156200178a5760fb546040516001600160a01b0390911690829062001757906200212b565b6200176492919062002cdc565b604051809103906000f08015801562001781573d6000803e3d6000fd5b50915062001841565b60fb60009054906101000a90046001600160a01b03166001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620017de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001804919062002d0a565b81604051620018139062002139565b6200182092919062002cdc565b604051809103906000f0801580156200183d573d6000803e3d6000fd5b5091505b60fc54604051634e93f47b60e01b81526001600160a01b03821691632f2ff15d918391634e93f47b916200188691600160a01b900463ffffffff169060040162002264565b602060405180830381865afa158015620018a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018ca9190620029d4565b87606001516040518363ffffffff1660e01b8152600401620018ee929190620029ee565b600060405180830381600087803b1580156200190957600080fd5b505af11580156200191e573d6000803e3d6000fd5b505060fc54604051634e93f47b60e01b81526001600160a01b0382169350632f2ff15d92508391634e93f47b916200196791600160a01b900463ffffffff169060040162002264565b602060405180830381865afa15801562001985573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019ab9190620029d4565b846040518363ffffffff1660e01b8152600401620019cb929190620029ee565b600060405180830381600087803b158015620019e657600080fd5b505af1158015620019fb573d6000803e3d6000fd5b505088516020808b0191909120600090815260fe90915260409020546001600160a01b0316915062001a5c9050578651602080890191909120600090815260fe9091526040902080546001600160a01b0319166001600160a01b0384161790555b6001600160a01b038216600090815260fd6020526040902062001a80878262002a6f565b506001600160a01b038216600090815260fd6020526040902060020162001aa8888262002a6f565b50604051632f2ff15d60e01b81526001600160a01b03831690632f2ff15d9062001ada906000903390600401620029ee565b600060405180830381600087803b15801562001af557600080fd5b505af115801562001b0a573d6000803e3d6000fd5b5050604051631b2b455f60e11b81526001600160a01b03851692506336568abe915062001b3f906000903090600401620029ee565b600060405180830381600087803b15801562001b5a57600080fd5b505af115801562001b6f573d6000803e3d6000fd5b505061010180546001810182556000919091527f109ea3cebb188b9c1b9fc5bb3920be60dfdc8699098dff92f3d80daaca7476890180546001600160a01b0319166001600160a01b038616179055505060fc54604051600160a01b90910463ffffffff169062001be190899062002d2a565b6040518091039020836001600160a01b03167fabf24e13dd04b5233e0ccecc88963e42e9d8b5ceae25458b61109fcbc0201bfe89898960405162001c289392919062002d48565b60405180910390a460fc8054600160a01b900463ffffffff1690601462001c4f8362002d83565b91906101000a81548163ffffffff021916908363ffffffff160217905550505095945050505050565b6001600160a01b03163b151590565b620008e3828262001437565b62001c9f828262000ed0565b620008e35762001caf8162001dc7565b62001cbc83602062001dda565b60405160200162001ccf92919062002da9565b60408051601f198184030181529082905262461bcd60e51b8252620009909160040162002b3b565b62001d028162001c78565b62001d665760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840162000990565b60008051602062003f0983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b62001da18362001f9a565b60008251118062001daf5750805b156200091e5762001dc1838362001fdc565b50505050565b6060620005e16001600160a01b03831660145b6060600062001deb83600262002e1c565b62001df890600262002e36565b6001600160401b0381111562001e125762001e12620022c9565b6040519080825280601f01601f19166020018201604052801562001e3d576020820181803683370190505b509050600360fc1b8160008151811062001e5b5762001e5b620028ea565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811062001e8d5762001e8d620028ea565b60200101906001600160f81b031916908160001a905350600062001eb384600262002e1c565b62001ec090600162002e36565b90505b600181111562001f42576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062001ef85762001ef8620028ea565b1a60f81b82828151811062001f115762001f11620028ea565b60200101906001600160f81b031916908160001a90535060049490941c9362001f3a8162002e4c565b905062001ec3565b50831562001f935760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000990565b9392505050565b62001fa58162001cf7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606062001fe98362001c78565b620020465760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840162000990565b600080846001600160a01b03168460405162002063919062002d2a565b600060405180830381855af49150503d8060008114620020a0576040519150601f19603f3d011682016040523d82523d6000602084013e620020a5565b606091505b5091509150620020d0828260405180606001604052806027815260200162003f2960279139620020d9565b95945050505050565b60608315620020ea57508162001f93565b62001f938383815115620021015781518083602001fd5b8060405162461bcd60e51b815260040162000990919062002b3b565b6104c98062002e6783390190565b6106cd806200333083390190565b6104ec80620039fd83390190565b6000602082840312156200215a57600080fd5b81356001600160e01b03198116811462001f9357600080fd5b6001600160a01b038116811462000a7657600080fd5b8035620021968162002173565b919050565b600060208284031215620021ae57600080fd5b813562001f938162002173565b60005b83811015620021d8578181015183820152602001620021be565b50506000910152565b60008151808452620021fb816020860160208601620021bb565b601f01601f19169290920160200192915050565b606081526000620022246060830186620021e1565b84151560208401528281036040840152620022408185620021e1565b9695505050505050565b6000602082840312156200225d57600080fd5b5035919050565b63ffffffff91909116815260200190565b600080604083850312156200228957600080fd5b8235915060208301356200229d8162002173565b809150509250929050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715620023055762002305620022c9565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620023365762002336620022c9565b604052919050565b60006001600160401b038311156200235a576200235a620022c9565b6200236f601f8401601f19166020016200230b565b90508281528383830111156200238457600080fd5b828260208301376000602084830101529392505050565b60008060408385031215620023af57600080fd5b8235620023bc8162002173565b915060208301356001600160401b03811115620023d857600080fd5b8301601f81018513620023ea57600080fd5b620023fb858235602084016200233e565b9150509250929050565b600082601f8301126200241757600080fd5b62001f93838335602085016200233e565b600080604083850312156200243c57600080fd5b8235620024498162002173565b915060208301356001600160401b038111156200246557600080fd5b620023fb8582860162002405565b803563ffffffff811681146200219657600080fd5b60006001600160401b03821115620024a457620024a4620022c9565b5060051b60200190565b600082601f830112620024c057600080fd5b81356020620024d9620024d38362002488565b6200230b565b82815260059290921b84018101918181019086841115620024f957600080fd5b8286015b848110156200252857803561ffff811681146200251a5760008081fd5b8352918301918301620024fd565b509695505050505050565b600082601f8301126200254557600080fd5b8135602062002558620024d38362002488565b82815260059290921b840181019181810190868411156200257857600080fd5b8286015b84811015620025285780356001600160801b03811681146200259e5760008081fd5b83529183019183016200257c565b801515811462000a7657600080fd5b80356200219681620025ac565b600060608284031215620025db57600080fd5b604051606081016001600160401b0381118282101715620026005762002600620022c9565b80604052508091508235815260208301356020820152604083013560408201525092915050565b60008060008060c085870312156200263e57600080fd5b84356001600160401b03808211156200265657600080fd5b620026648883890162002405565b955060208701359150808211156200267b57600080fd5b620026898883890162002405565b94506040870135915080821115620026a057600080fd5b908601906101008289031215620026b657600080fd5b620026c0620022df565b620026cb8362002473565b8152602083013582811115620026e057600080fd5b620026ee8a828601620024ae565b6020830152506040830135828111156200270757600080fd5b620027158a82860162002533565b604083015250620027296060840162002189565b60608201526200273c6080840162002189565b60808201526200274f60a0840162002189565b60a08201526200276260c0840162002189565b60c08201526200277560e08401620025bb565b60e08201528094505050506200278f8660608701620025c8565b905092959194509250565b60008060408385031215620027ae57600080fd5b8235620027bb8162002173565b946020939093013593505050565b60008060408385031215620027dd57600080fd5b8235620027ea8162002173565b915060208301356200229d81620025ac565b600080604083850312156200281057600080fd5b82356200281d8162002173565b91506200282d6020840162002473565b90509250929050565b600080600080600060a086880312156200284f57600080fd5b85356200285c8162002173565b945060208601356200286e8162002173565b93506040860135620028808162002173565b92506060860135620028928162002173565b9150620028a26080870162002473565b90509295509295909350565b600181811c90821680620028c357607f821691505b602082108103620028e457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115620005e157620005e162002900565b634e487b7160e01b600052603160045260246000fd5b60006001820162002957576200295762002900565b5060010190565b6020808252602c9082015260008051602062003ee983398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602062003ee983398151915260408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215620029e757600080fd5b5051919050565b9182526001600160a01b0316602082015260400190565b60006020828403121562002a1857600080fd5b815162001f9381620025ac565b601f8211156200091e57600081815260208120601f850160051c8101602086101562002a4e5750805b601f850160051c820191505b81811015620013785782815560010162002a5a565b81516001600160401b0381111562002a8b5762002a8b620022c9565b62002aa38162002a9c8454620028ae565b8462002a25565b602080601f83116001811462002adb576000841562002ac25750858301515b600019600386901b1c1916600185901b17855562001378565b600085815260208120601f198616915b8281101562002b0c5788860151825594840194600190910190840162002aeb565b508582101562002b2b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600062001f936020830184620021e1565b600081518084526020808501945080840160005b8381101562002b8b5781516001600160801b03168752958201959082019060010162002b64565b509495945050505050565b805163ffffffff168252602080820151610100828501819052815190850181905260009261012086019281019184905b8082101562002bec57835161ffff16855293820193928201926001919091019062002bc6565b505050506040830151848203604086015262002c09828262002b50565b915050606083015162002c206060860182620022a8565b50608083015162002c356080860182620022a8565b5060a083015162002c4a60a0860182620022a8565b5060c083015162002c5f60c0860182620022a8565b5060e083015162002c7460e086018215159052565b509392505050565b8051825260208082015190830152604090810151910152565b600060018060a01b03808716835260c0602084015262002cb960c084018762002b96565b915062002cca604084018662002c7c565b80841660a08401525095945050505050565b6001600160a01b038316815260406020820181905260009062002d0290830184620021e1565b949350505050565b60006020828403121562002d1d57600080fd5b815162001f938162002173565b6000825162002d3e818460208701620021bb565b9190910192915050565b60a08152600062002d5d60a0830186620021e1565b828103602084015262002d71818662002b96565b91505062002d02604083018462002c7c565b600063ffffffff80831681810362002d9f5762002d9f62002900565b6001019392505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835162002ddd816017850160208801620021bb565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162002e10816028840160208801620021bb565b01602801949350505050565b8082028115828204841417620005e157620005e162002900565b80820180821115620005e157620005e162002900565b60008162002e5e5762002e5e62002900565b50600019019056fe608060405234801561001057600080fd5b506040516104c93803806104c983398101604081905261002f9161013a565b61003833610047565b61004181610097565b5061016a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6101185760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561014c57600080fd5b81516001600160a01b038116811461016357600080fd5b9392505050565b610350806101796000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100aa575b600080fd5b61006f61006a3660046102ea565b6100bd565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f610105565b61007e610119565b61006f6100b83660046102ea565b610128565b6100c56101a6565b6100ce81610205565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61010d6101a6565b610117600061029a565b565b6000546001600160a01b031690565b6101306101a6565b6001600160a01b03811661019a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101a38161029a565b50565b336101af610119565b6001600160a01b0316146101175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610191565b6001600160a01b0381163b6102785760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610191565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156102fc57600080fd5b81356001600160a01b038116811461031357600080fd5b939250505056fea264697066735822122038970e7cf09dc887c70d5260fa612ed542a4b7fc825586d54bcad83fc1ebdd9164736f6c6343000813003360806040526040516106cd3803806106cd83398101604081905261002291610421565b61002e82826000610035565b505061054b565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104e1565b8361026e565b505b505050565b6100ff8161029a565b61015e5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101c8816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c391906104e1565b61029a565b61022d5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610155565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029383836040518060600160405280602781526020016106a6602791396102a9565b9392505050565b6001600160a01b03163b151590565b6060600080856001600160a01b0316856040516102c691906104fc565b600060405180830381855af49150503d8060008114610301576040519150601f19603f3d011682016040523d82523d6000602084013e610306565b606091505b50909250905061031886838387610322565b9695505050505050565b6060831561038f5782516000036103885761033c8561029a565b6103885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610155565b5081610399565b61039983836103a1565b949350505050565b8151156103b15781518083602001fd5b8060405162461bcd60e51b81526004016101559190610518565b80516001600160a01b03811681146103e257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610418578181015183820152602001610400565b50506000910152565b6000806040838503121561043457600080fd5b61043d836103cb565b60208401519092506001600160401b038082111561045a57600080fd5b818501915085601f83011261046e57600080fd5b815181811115610480576104806103e7565b604051601f8201601f19908116603f011681019083821181831017156104a8576104a86103e7565b816040528281528860208487010111156104c157600080fd5b6104d28360208301602088016103fd565b80955050505050509250929050565b6000602082840312156104f357600080fd5b610293826103cb565b6000825161050e8184602087016103fd565b9190910192915050565b60208152600082518060208401526105378160408501602087016103fd565b601f01601f19169190910160400192915050565b61014c8061055a6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906100e6565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b6000602082840312156100f857600080fd5b81516001600160a01b038116811461010f57600080fd5b939250505056fea26469706673582212207b4f4f4bd905b812712d76801c617b8aa3f4c3f8d6d9e59a18563606189dd4e564736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656460806040526040516104ec3803806104ec833981016040819052610022916102e9565b61002e82826000610035565b5050610406565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c683836040518060600160405280602781526020016104c56027913961017e565b9392505050565b6100d6816101f7565b61013d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019b91906103b7565b600060405180830381855af49150503d80600081146101d6576040519150601f19603f3d011682016040523d82523d6000602084013e6101db565b606091505b5090925090506101ed86838387610206565b9695505050505050565b6001600160a01b03163b151590565b6060831561027357825160000361026c57610220856101f7565b61026c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610134565b508161027d565b61027d8383610285565b949350505050565b8151156102955781518083602001fd5b8060405162461bcd60e51b815260040161013491906103d3565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102e05781810151838201526020016102c8565b50506000910152565b600080604083850312156102fc57600080fd5b82516001600160a01b038116811461031357600080fd5b60208401519092506001600160401b038082111561033057600080fd5b818501915085601f83011261034457600080fd5b815181811115610356576103566102af565b604051601f8201601f19908116603f0116810190838211818310171561037e5761037e6102af565b8160405282815288602084870101111561039757600080fd5b6103a88360208301602088016102c5565b80955050505050509250929050565b600082516103c98184602087016102c5565b9190910192915050565b60208152600082518060208401526103f28160408501602087016102c5565b601f01601f19169190910160400192915050565b60b1806104146000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea2646970667358221220a4cda07e5b291f61d81b4ee016ef5ca6a806aa56384b08ff8d52828dbed4d68d64736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656446756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122036e228ed51be5ead5046e2e3792b052aaae02973009ae7f5868c0c0befa5fe9764736f6c63430008130033";
963
+ "0x60a06040523060805234801561001457600080fd5b50608051613eae61004c600039600081816109b6015281816109f901528181610a8a01528181610acd0152610cb70152613eae6000f3fe608060405260043610620001645760003560e01c806301ffc9a71462000169578063038defd714620001a35780630b1ca49a14620001d9578063248a9ca3146200020057806324a9d85314620002345780632f2ff15d146200027057806336568abe14620002955780633659cfe614620002ba5780634690484014620002df57806347ccca0214620003105780634f1ef28614620003325780634f962c8c146200034957806352d1902d146200036e57806357b707671462000386578063592f7b0514620003ab57806376967ae014620003d15780638abf607714620003f657806391d1485414620004185780639cedd89b146200043d5780639cf5c6131462000477578063a217fddf146200049c578063ac4afa3814620004b3578063ae6ec80114620004d8578063ca6d56dc14620004fd578063d547741f1462000522578063e9e50b041462000547578063f8a2334c146200056c578063fcf1e0091462000591575b600080fd5b3480156200017657600080fd5b506200018e620001883660046200206d565b620005b6565b60405190151581526020015b60405180910390f35b348015620001b057600080fd5b50620001c8620001c2366004620020c1565b620005ee565b6040516200019a9392919062002135565b348015620001e657600080fd5b50620001fe620001f8366004620020c1565b62000739565b005b3480156200020d57600080fd5b50620002256200021f36600462002170565b620008ee565b6040519081526020016200019a565b3480156200024157600080fd5b5060ff546200025a90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016200019a565b3480156200027d57600080fd5b50620001fe6200028f3660046200218a565b62000903565b348015620002a257600080fd5b50620001fe620002b43660046200218a565b6200092a565b348015620002c757600080fd5b50620001fe620002d9366004620020c1565b620009ac565b348015620002ec57600080fd5b5060ff5462000301906001600160a01b031681565b6040516200019a9190620021ca565b3480156200031d57600080fd5b5060fc5462000301906001600160a01b031681565b620001fe62000343366004620022b0565b62000a80565b3480156200035657600080fd5b50620001fe620003683660046200233d565b62000b41565b3480156200037b57600080fd5b506200022562000caa565b3480156200039357600080fd5b5062000301620003a536600462002388565b62000d5b565b348015620003b857600080fd5b5060fc546200025a90600160a01b900463ffffffff1681565b348015620003de57600080fd5b5062000301620003f03660046200256b565b62000d95565b3480156200040357600080fd5b5060fb5462000301906001600160a01b031681565b3480156200042557600080fd5b506200018e620004373660046200218a565b62000ed9565b3480156200044a57600080fd5b50620003016200045c36600462002170565b60fe602052600090815260409020546001600160a01b031681565b3480156200048457600080fd5b50620001fe62000496366004620026f1565b62000f04565b348015620004a957600080fd5b5062000225600081565b348015620004c057600080fd5b5062000301620004d236600462002170565b62000f6d565b348015620004e557600080fd5b5062000301620004f73660046200256b565b62000f99565b3480156200050a57600080fd5b50620001fe6200051c366004620020c1565b620010d1565b3480156200052f57600080fd5b50620001fe620005413660046200218a565b6200114d565b3480156200055457600080fd5b50620001fe6200056636600462002724565b6200116f565b3480156200057957600080fd5b50620001fe6200058b3660046200275e565b620011bc565b3480156200059e57600080fd5b50620001fe620005b0366004620020c1565b6200138a565b60006001600160e01b03198216637965db0b60e01b1480620005e857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60fd602052600090815260409020805481906200060b90620027ca565b80601f01602080910402602001604051908101604052809291908181526020018280546200063990620027ca565b80156200068a5780601f106200065e576101008083540402835291602001916200068a565b820191906000526020600020905b8154815290600101906020018083116200066c57829003601f168201915b5050506001840154600285018054949560ff909216949193509150620006b090620027ca565b80601f0160208091040260200160405190810160405280929190818152602001828054620006de90620027ca565b80156200072f5780601f1062000703576101008083540402835291602001916200072f565b820191906000526020600020905b8154815290600101906020018083116200071157829003601f168201915b5050505050905083565b33600090815260fd6020526040902060020180546200075890620027ca565b90506000036200077b57604051630cc15fbb60e11b815260040160405180910390fd5b60005b6001600160a01b03821660009081526101006020526040902054811015620008ea576001600160a01b038216600090815261010060205260409020805433919083908110620007d157620007d162002806565b6000918252602090912001546001600160a01b031603620008d5576001600160a01b0382166000908152610100602052604090208054620008159060019062002832565b8154811062000828576200082862002806565b60009182526020808320909101546001600160a01b038581168452610100909252604090922080549190921691908390811062000869576200086962002806565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815261010090915260409020805480620008b257620008b262002848565b600082815260209020810160001990810180546001600160a01b03191690550190555b80620008e1816200285e565b9150506200077e565b5050565b60009081526065602052604090206001015490565b6200090e82620008ee565b620009198162001435565b62000925838362001441565b505050565b6001600160a01b0381163314620009a05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b620008ea8282620014cb565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003620009f75760405162461bcd60e51b815260040162000997906200287a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662000a2b62001535565b6001600160a01b03161462000a545760405162461bcd60e51b81526004016200099790620028b5565b62000a5f8162001552565b6040805160008082526020820190925262000a7d918391906200155f565b50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300362000acb5760405162461bcd60e51b815260040162000997906200287a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662000aff62001535565b6001600160a01b03161462000b285760405162461bcd60e51b81526004016200099790620028b5565b62000b338262001552565b620008ea828260016200155f565b81806001600160a01b03166391d14854826001600160a01b031663a217fddf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b90573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb69190620028f0565b336040518363ffffffff1660e01b815260040162000bd69291906200290a565b602060405180830381865afa15801562000bf4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c1a919062002921565b151560000362000c3d57604051631d799a6d60e21b815260040160405180910390fd5b6001600160a01b038316600090815260fd6020526040902062000c6183826200298b565b50826001600160a01b03167f941ad6ac0538b96f9e89b9b52ec11031b50591baa2f16c0cdf1f94c69f389d6d8360405162000c9d919062002a57565b60405180910390a2505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161462000d475760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b606482015260840162000997565b5060008051602062003e3283398151915290565b610100602052816000526040600020818154811062000d7957600080fd5b6000918252602090912001546001600160a01b03169150829050565b8451602080870191909120600090815260fe909152604081205486906001600160a01b0316801562000ebc57806001600160a01b03166391d14854826001600160a01b031663a217fddf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e359190620028f0565b336040518363ffffffff1660e01b815260040162000e559291906200290a565b602060405180830381865afa15801562000e73573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e99919062002921565b151560000362000ebc57604051631d799a6d60e21b815260040160405180910390fd5b62000ecd88888888886000620016d7565b98975050505050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600062000f118162001435565b6001600160a01b038316600081815260fd6020908152604091829020600101805460ff191686151590811790915591519182527fafdc942e2e075abc791516f168aed9293862095eb31c0dab19c8d0d061018a93910162000c9d565b610101818154811062000f7f57600080fd5b6000918252602090912001546001600160a01b0316905081565b8451602080870191909120600090815260fe909152604081205486906001600160a01b03168015620010c057806001600160a01b03166391d14854826001600160a01b031663a217fddf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001013573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010399190620028f0565b336040518363ffffffff1660e01b8152600401620010599291906200290a565b602060405180830381865afa15801562001077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200109d919062002921565b1515600003620010c057604051631d799a6d60e21b815260040160405180910390fd5b62000ecd88888888886001620016d7565b33600090815260fd602052604090206002018054620010f090620027ca565b90506000036200111357604051630cc15fbb60e11b815260040160405180910390fd5b6001600160a01b03166000908152610100602090815260408220805460018101825590835291200180546001600160a01b03191633179055565b6200115882620008ee565b620011638162001435565b620009258383620014cb565b60006200117c8162001435565b5060ff80546001600160a01b039093166001600160a01b031963ffffffff909316600160a01b02929092166001600160c01b031990931692909217179055565b600054610100900460ff1615808015620011dd5750600054600160ff909116105b80620012025750620011ef3062001b9e565b15801562001202575060005460ff166001145b620012675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000997565b6000805460ff1916600117905580156200128b576000805461ff0019166101001790555b60fc805463ffffffff60a01b1916600160a01b1790556040518590620012b19062002043565b620012bd9190620021ca565b604051809103906000f080158015620012da573d6000803e3d6000fd5b5060fb80546001600160a01b03199081166001600160a01b039384161790915560fc805490911686831617905560ff80549185166001600160c01b031990921691909117600160a01b63ffffffff8516021790556200133b60008762001bad565b801562001382576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6000620013978162001435565b60fb54604051631b2ce7f360e11b81526001600160a01b0390911690633659cfe690620013c9908590600401620021ca565b600060405180830381600087803b158015620013e457600080fd5b505af1158015620013f9573d6000803e3d6000fd5b50506040516001600160a01b03851692507f71ce7583e9b7e543de8a69a6af369c0b3528b287064f9dce26a38025e36dc2c79150600090a25050565b62000a7d813362001bb9565b6200144d828262000ed9565b620008ea5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620014873390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b620014d7828262000ed9565b15620008ea5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008051602062003e32833981519152546001600160a01b031690565b6000620008ea8162001435565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156200159557620009258362001c1d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015620015f2575060408051601f3d908101601f19168201909252620015ef91810190620028f0565b60015b620016575760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840162000997565b60008051602062003e328339815191528114620016c95760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840162000997565b506200092583838362001cbc565b60fc5463ffffffff600160a01b8204168552604051600091829162001711916001600160a01b031690889088908890309060240162002bb1565b60408051601f198184030181529190526020810180516001600160e01b0316634b1e337f60e01b17905290508215620017965760fb546040516001600160a01b03909116908290620017639062002051565b6200177092919062002c05565b604051809103906000f0801580156200178d573d6000803e3d6000fd5b5091506200184d565b60fb60009054906101000a90046001600160a01b03166001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620017ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001810919062002c33565b816040516200181f906200205f565b6200182c92919062002c05565b604051809103906000f08015801562001849573d6000803e3d6000fd5b5091505b60fc54604051634e93f47b60e01b815263ffffffff600160a01b83041660048201526001600160a01b0390911690632f2ff15d908290634e93f47b90602401602060405180830381865afa158015620018aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018d09190620028f0565b846040518363ffffffff1660e01b8152600401620018f09291906200290a565b600060405180830381600087803b1580156200190b57600080fd5b505af115801562001920573d6000803e3d6000fd5b505089516020808c0191909120600090815260fe90915260409020546001600160a01b031691506200198190505787516020808a0191909120600090815260fe9091526040902080546001600160a01b0319166001600160a01b0384161790555b6001600160a01b038216600090815260fd60205260409020620019a588826200298b565b506001600160a01b038216600090815260fd60205260409020600201620019cd89826200298b565b50604051632f2ff15d60e01b81526001600160a01b03831690632f2ff15d90620019ff9060009033906004016200290a565b600060405180830381600087803b15801562001a1a57600080fd5b505af115801562001a2f573d6000803e3d6000fd5b5050604051631b2b455f60e11b81526001600160a01b03851692506336568abe915062001a649060009030906004016200290a565b600060405180830381600087803b15801562001a7f57600080fd5b505af115801562001a94573d6000803e3d6000fd5b505061010180546001810182556000919091527f109ea3cebb188b9c1b9fc5bb3920be60dfdc8699098dff92f3d80daaca7476890180546001600160a01b0319166001600160a01b038616179055505060fc54604051600160a01b90910463ffffffff169062001b06908a9062002c53565b6040518091039020836001600160a01b03167fabf24e13dd04b5233e0ccecc88963e42e9d8b5ceae25458b61109fcbc0201bfe8a8a8a60405162001b4d9392919062002c71565b60405180910390a460fc8054600160a01b900463ffffffff1690601462001b748362002cac565b91906101000a81548163ffffffff021916908363ffffffff16021790555050509695505050505050565b6001600160a01b03163b151590565b620008ea828262001441565b62001bc5828262000ed9565b620008ea5762001bd58162001ced565b62001be283602062001d00565b60405160200162001bf592919062002cd2565b60408051601f198184030181529082905262461bcd60e51b8252620009979160040162002a57565b62001c288162001b9e565b62001c8c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840162000997565b60008051602062003e3283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b62001cc78362001ec0565b60008251118062001cd55750805b15620009255762001ce7838362001f02565b50505050565b6060620005e86001600160a01b03831660145b6060600062001d1183600262002d45565b62001d1e90600262002d5f565b6001600160401b0381111562001d385762001d38620021de565b6040519080825280601f01601f19166020018201604052801562001d63576020820181803683370190505b509050600360fc1b8160008151811062001d815762001d8162002806565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811062001db35762001db362002806565b60200101906001600160f81b031916908160001a905350600062001dd984600262002d45565b62001de690600162002d5f565b90505b600181111562001e68576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062001e1e5762001e1e62002806565b1a60f81b82828151811062001e375762001e3762002806565b60200101906001600160f81b031916908160001a90535060049490941c9362001e608162002d75565b905062001de9565b50831562001eb95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000997565b9392505050565b62001ecb8162001c1d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606062001f0f8362001b9e565b62001f6c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840162000997565b600080846001600160a01b03168460405162001f89919062002c53565b600060405180830381855af49150503d806000811462001fc6576040519150601f19603f3d011682016040523d82523d6000602084013e62001fcb565b606091505b509150915062001ff6828260405180606001604052806027815260200162003e526027913962001fff565b95945050505050565b606083156200201057508162001eb9565b62001eb98383815115620020275781518083602001fd5b8060405162461bcd60e51b815260040162000997919062002a57565b6104c98062002d9083390190565b6106cd806200325983390190565b6104ec806200392683390190565b6000602082840312156200208057600080fd5b81356001600160e01b03198116811462001eb957600080fd5b6001600160a01b038116811462000a7d57600080fd5b8035620020bc8162002099565b919050565b600060208284031215620020d457600080fd5b813562001eb98162002099565b60005b83811015620020fe578181015183820152602001620020e4565b50506000910152565b6000815180845262002121816020860160208601620020e1565b601f01601f19169290920160200192915050565b6060815260006200214a606083018662002107565b8415156020840152828103604084015262002166818562002107565b9695505050505050565b6000602082840312156200218357600080fd5b5035919050565b600080604083850312156200219e57600080fd5b823591506020830135620021b28162002099565b809150509250929050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b03811182821017156200221a576200221a620021de565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200224b576200224b620021de565b604052919050565b60006001600160401b038311156200226f576200226f620021de565b62002284601f8401601f191660200162002220565b90508281528383830111156200229957600080fd5b828260208301376000602084830101529392505050565b60008060408385031215620022c457600080fd5b8235620022d18162002099565b915060208301356001600160401b03811115620022ed57600080fd5b8301601f81018513620022ff57600080fd5b620023108582356020840162002253565b9150509250929050565b600082601f8301126200232c57600080fd5b62001eb98383356020850162002253565b600080604083850312156200235157600080fd5b82356200235e8162002099565b915060208301356001600160401b038111156200237a57600080fd5b62002310858286016200231a565b600080604083850312156200239c57600080fd5b8235620023a98162002099565b946020939093013593505050565b803563ffffffff81168114620020bc57600080fd5b60006001600160401b03821115620023e857620023e8620021de565b5060051b60200190565b600082601f8301126200240457600080fd5b813560206200241d6200241783620023cc565b62002220565b82815260059290921b840181019181810190868411156200243d57600080fd5b8286015b848110156200246c57803561ffff811681146200245e5760008081fd5b835291830191830162002441565b509695505050505050565b600082601f8301126200248957600080fd5b813560206200249c6200241783620023cc565b82815260059290921b84018101918181019086841115620024bc57600080fd5b8286015b848110156200246c5780356001600160801b0381168114620024e25760008081fd5b8352918301918301620024c0565b801515811462000a7d57600080fd5b8035620020bc81620024f0565b6000606082840312156200251f57600080fd5b604051606081016001600160401b0381118282101715620025445762002544620021de565b80604052508091508235815260208301356020820152604083013560408201525092915050565b600080600080600060e086880312156200258457600080fd5b85356001600160401b03808211156200259c57600080fd5b620025aa89838a016200231a565b96506020880135915080821115620025c157600080fd5b620025cf89838a016200231a565b95506040880135915080821115620025e657600080fd5b90870190610100828a031215620025fc57600080fd5b62002606620021f4565b6200261183620023b7565b81526020830135828111156200262657600080fd5b620026348b828601620023f2565b6020830152506040830135828111156200264d57600080fd5b6200265b8b82860162002477565b6040830152506200266f60608401620020af565b60608201526200268260808401620020af565b60808201526200269560a08401620020af565b60a0820152620026a860c08401620020af565b60c0820152620026bb60e08401620024ff565b60e0820152809550505050620026d587606088016200250c565b9150620026e560c08701620023b7565b90509295509295909350565b600080604083850312156200270557600080fd5b8235620027128162002099565b91506020830135620021b281620024f0565b600080604083850312156200273857600080fd5b8235620027458162002099565b91506200275560208401620023b7565b90509250929050565b600080600080600060a086880312156200277757600080fd5b8535620027848162002099565b94506020860135620027968162002099565b93506040860135620027a88162002099565b92506060860135620027ba8162002099565b9150620026e560808701620023b7565b600181811c90821680620027df57607f821691505b6020821081036200280057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115620005e857620005e86200281c565b634e487b7160e01b600052603160045260246000fd5b6000600182016200287357620028736200281c565b5060010190565b6020808252602c9082015260008051602062003e1283398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602062003e1283398151915260408201526b6163746976652070726f787960a01b606082015260800190565b6000602082840312156200290357600080fd5b5051919050565b9182526001600160a01b0316602082015260400190565b6000602082840312156200293457600080fd5b815162001eb981620024f0565b601f8211156200092557600081815260208120601f850160051c810160208610156200296a5750805b601f850160051c820191505b81811015620013825782815560010162002976565b81516001600160401b03811115620029a757620029a7620021de565b620029bf81620029b88454620027ca565b8462002941565b602080601f831160018114620029f75760008415620029de5750858301515b600019600386901b1c1916600185901b17855562001382565b600085815260208120601f198616915b8281101562002a285788860151825594840194600190910190840162002a07565b508582101562002a475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600062001eb9602083018462002107565b600081518084526020808501945080840160005b8381101562002aa75781516001600160801b03168752958201959082019060010162002a80565b509495945050505050565b805163ffffffff168252602080820151610100828501819052815190850181905260009261012086019281019184905b8082101562002b0857835161ffff16855293820193928201926001919091019062002ae2565b505050506040830151848203604086015262002b25828262002a6c565b915050606083015162002b3c6060860182620021bd565b50608083015162002b516080860182620021bd565b5060a083015162002b6660a0860182620021bd565b5060c083015162002b7b60c0860182620021bd565b5060e083015162002b9060e086018215159052565b509392505050565b8051825260208082015190830152604090810151910152565b600060018060a01b03808816835260e0602084015262002bd560e084018862002ab2565b915062002be6604084018762002b98565b63ffffffff851660a084015280841660c0840152509695505050505050565b6001600160a01b038316815260406020820181905260009062002c2b9083018462002107565b949350505050565b60006020828403121562002c4657600080fd5b815162001eb98162002099565b6000825162002c67818460208701620020e1565b9190910192915050565b60a08152600062002c8660a083018662002107565b828103602084015262002c9a818662002ab2565b91505062002c2b604083018462002b98565b600063ffffffff80831681810362002cc85762002cc86200281c565b6001019392505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835162002d06816017850160208801620020e1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162002d39816028840160208801620020e1565b01602801949350505050565b8082028115828204841417620005e857620005e86200281c565b80820180821115620005e857620005e86200281c565b60008162002d875762002d876200281c565b50600019019056fe608060405234801561001057600080fd5b506040516104c93803806104c983398101604081905261002f9161013a565b61003833610047565b61004181610097565b5061016a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6101185760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561014c57600080fd5b81516001600160a01b038116811461016357600080fd5b9392505050565b610350806101796000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100aa575b600080fd5b61006f61006a3660046102ea565b6100bd565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f610105565b61007e610119565b61006f6100b83660046102ea565b610128565b6100c56101a6565b6100ce81610205565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61010d6101a6565b610117600061029a565b565b6000546001600160a01b031690565b6101306101a6565b6001600160a01b03811661019a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101a38161029a565b50565b336101af610119565b6001600160a01b0316146101175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610191565b6001600160a01b0381163b6102785760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610191565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156102fc57600080fd5b81356001600160a01b038116811461031357600080fd5b939250505056fea264697066735822122038970e7cf09dc887c70d5260fa612ed542a4b7fc825586d54bcad83fc1ebdd9164736f6c6343000813003360806040526040516106cd3803806106cd83398101604081905261002291610421565b61002e82826000610035565b505061054b565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104e1565b8361026e565b505b505050565b6100ff8161029a565b61015e5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101c8816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c391906104e1565b61029a565b61022d5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610155565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029383836040518060600160405280602781526020016106a6602791396102a9565b9392505050565b6001600160a01b03163b151590565b6060600080856001600160a01b0316856040516102c691906104fc565b600060405180830381855af49150503d8060008114610301576040519150601f19603f3d011682016040523d82523d6000602084013e610306565b606091505b50909250905061031886838387610322565b9695505050505050565b6060831561038f5782516000036103885761033c8561029a565b6103885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610155565b5081610399565b61039983836103a1565b949350505050565b8151156103b15781518083602001fd5b8060405162461bcd60e51b81526004016101559190610518565b80516001600160a01b03811681146103e257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610418578181015183820152602001610400565b50506000910152565b6000806040838503121561043457600080fd5b61043d836103cb565b60208401519092506001600160401b038082111561045a57600080fd5b818501915085601f83011261046e57600080fd5b815181811115610480576104806103e7565b604051601f8201601f19908116603f011681019083821181831017156104a8576104a86103e7565b816040528281528860208487010111156104c157600080fd5b6104d28360208301602088016103fd565b80955050505050509250929050565b6000602082840312156104f357600080fd5b610293826103cb565b6000825161050e8184602087016103fd565b9190910192915050565b60208152600082518060208401526105378160408501602087016103fd565b601f01601f19169190910160400192915050565b61014c8061055a6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906100e6565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b6000602082840312156100f857600080fd5b81516001600160a01b038116811461010f57600080fd5b939250505056fea26469706673582212207b4f4f4bd905b812712d76801c617b8aa3f4c3f8d6d9e59a18563606189dd4e564736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656460806040526040516104ec3803806104ec833981016040819052610022916102e9565b61002e82826000610035565b5050610406565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c683836040518060600160405280602781526020016104c56027913961017e565b9392505050565b6100d6816101f7565b61013d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019b91906103b7565b600060405180830381855af49150503d80600081146101d6576040519150601f19603f3d011682016040523d82523d6000602084013e6101db565b606091505b5090925090506101ed86838387610206565b9695505050505050565b6001600160a01b03163b151590565b6060831561027357825160000361026c57610220856101f7565b61026c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610134565b508161027d565b61027d8383610285565b949350505050565b8151156102955781518083602001fd5b8060405162461bcd60e51b815260040161013491906103d3565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102e05781810151838201526020016102c8565b50506000910152565b600080604083850312156102fc57600080fd5b82516001600160a01b038116811461031357600080fd5b60208401519092506001600160401b038082111561033057600080fd5b818501915085601f83011261034457600080fd5b815181811115610356576103566102af565b604051601f8201601f19908116603f0116810190838211818310171561037e5761037e6102af565b8160405282815288602084870101111561039757600080fd5b6103a88360208301602088016102c5565b80955050505050509250929050565b600082516103c98184602087016102c5565b9190910192915050565b60208152600082518060208401526103f28160408501602087016102c5565b601f01601f19169190910160400192915050565b60b1806104146000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea2646970667358221220a4cda07e5b291f61d81b4ee016ef5ca6a806aa56384b08ff8d52828dbed4d68d64736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656446756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122044f5c400a13c9fd8ca4b2b561a2460b2351e0706773dd9516462a1e1f772b88e64736f6c63430008130033";
954
964
 
955
965
  type DirectPaymentsFactoryConstructorParams =
956
966
  | [signer?: Signer]