;; SPDX-License-Identifier: BUSL-1.1
(impl-trait 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.proposal-trait.proposal-trait)
(use-trait ft-trait 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.trait-sip-010.sip-010-trait)
(define-constant ONE_8 u100000000) ;; 8 decimal places
(define-constant revenue-list (list
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wstx-v2, amount: u6137483005663 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex, amount: u52421450254330 }
{ token: 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-abtc, amount: u24587417 }
{ token: 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-susdt, amount: u549930499027 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wcorgi, amount: u922841187605162 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wsbtc, amount: u2252769 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wleo, amount: u476679467531525 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wxbtc, amount: u554012 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wnot, amount: u5972973435952680000 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.runes-dog, amount: u23110603841336 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wdiko, amount: u986885417021 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wmia, amount: u53819065570927 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-waeusdc, amount: u22417517883 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wlialex, amount: u353659554694 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wusda, amount: u17501540094 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wkapt, amount: u1082444440519280 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wnasty, amount: u433536719541048 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.brc20-trio, amount: u7347426336 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wxusd, amount: u6357502592 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wlqstx-v3, amount: u8462469456 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.brc20-db20, amount: u482191056898 }
{ token: 'SP673Z4BPB4R73359K9HE55F2X91V5BJTN5SXZ5T.runes-pups, amount: u230901147731 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wpomboo, amount: u551391056160852 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wplay, amount: u535850570444206 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wpepe, amount: u424614710044250 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.brc20-ornj, amount: u262399839487 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wgus, amount: u460592888294740 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.brc20-ordg, amount: u50650654968 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wnyc, amount: u1322972416762 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wkiki, amount: u361577402174056 }
{ token: 'SP673Z4BPB4R73359K9HE55F2X91V5BJTN5SXZ5T.runes-bdc, amount: u248601093886 }
{ token: 'SP2SF8P7AKN8NYHD57T96C51RRV9M0GKRN02BNHD2.token-wflat, amount: u7248699610387 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wmega, amount: u24113100000 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wlong, amount: u8938402962051340 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.brc20-ordi, amount: u137227948 }
{ token: 'SPRYBMPFT75XBFAH6YJ2YKTGC5P2E3KM6Y1F6NYK.ssl-DROID-62c6f, amount: u6618010468748 }
{ token: 'SP673Z4BPB4R73359K9HE55F2X91V5BJTN5SXZ5T.runes-tanuki, amount: u165790110727 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wusdh, amount: u1026125116 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wcharisma, amount: u4941697684 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wmoon, amount: u577035837882145 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wjindo, amount: u1265655431397500 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wfrodo, amount: u6700977203805 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wbone, amount: u217723701207461 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wvibes, amount: u1806429550281 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wtremp, amount: u50816815750000 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wroo, amount: u111497066279 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wwennaka, amount: u51091503538868 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wgoat, amount: u86244416873603 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wbordn, amount: u286818480043161 }
{ token: 'SPGYCP878RYFVT03ZT8TWGPKNYTSQB1578VVXHGE.ssl-shark-coin-stxcity-abac2, amount: u853848102521 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-waewbtc, amount: u3918 }
{ token: 'SP2SF8P7AKN8NYHD57T96C51RRV9M0GKRN02BNHD2.token-wstone, amount: u59327605812 }
{ token: 'SP39859AD7RQ6NYK00EJ8HN1DWE40C576FBDGHPA0.ssl-gas-futures-137cc, amount: u25390557270631000 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wliabtc, amount: u2756 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wwojak, amount: u1128530682812050 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wststx, amount: u265261261 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.brc20-ormm, amount: u8651325263559 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wwif, amount: u309397432016477 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wslm, amount: u100540240372 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wmax, amount: u107434639989943 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wban, amount: u15939879555 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wmojo, amount: u69815972730576 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wpnut, amount: u3512071165632 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.brc20-chax, amount: u1342301758769 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wdex, amount: u2012594244 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wchillguy, amount: u215663162800072 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wturtle, amount: u1014147787622 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wmick, amount: u17346530836856400 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wdokwon, amount: u20649964721314 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wstxoshi, amount: u6499770189811 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wfast, amount: u52173263595282 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wsimulation, amount: u32735329525532 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wbspx6900, amount: u62925218716042 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wbleo, amount: u6280951048267810 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wwsbtc, amount: u225414490673 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wnakamoto, amount: u29883958902775900000 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wfamily, amount: u37255471180439 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wpizza, amount: u33102174062990 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wxxx, amount: u5472996272500 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wdfv, amount: u7380166502750 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wall, amount: u137021782413016000 }
{ token: 'SP3CA2XYS3PE4SG2RHJ88C978HP3B0XSGZ73SWVZF.ssl-pepecola-566f8, amount: u9716396393976 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wparker, amount: u1917542044973470 }
{ token: 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.brc20-tx20, amount: u18767651662 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wputon, amount: u4211507574902880 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-whashiko, amount: u151646379832000000 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wgiggle, amount: u47058387420000 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wsurge, amount: u42312416539613 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wedel, amount: u74768723578607 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-17, amount: u424936374043 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wopk, amount: u98111433150421 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wcatstacks, amount: u60037880140225 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wwen, amount: u9976846272628 }
{ token: 'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-ssko, amount: u16709900428 }
{ token: 'SP2SF8P7AKN8NYHD57T96C51RRV9M0GKRN02BNHD2.token-wzilong, amount: u3452088250000 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-19, amount: u205661801249 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wstxarmy, amount: u7882419250000 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wgecko, amount: u616388946494 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-welon, amount: u5165834878042 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-16, amount: u5973293203 }
{ token: 'SPEJJMSNMD1F74RKVJSGPXJ1839STT5EVY0C64KZ.ssl-runes-hungry-53e9b, amount: u2500000 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wgme, amount: u1611014173380 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wmst, amount: u60548242255679 }
{ token: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wflint, amount: u46215062908793 }
{ token: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.token-wmeme, amount: u120987957905974 }
))
(define-public (execute (sender principal))
(let (
(pool-tokens (try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-registry-v2-01 get-pool-details-by-id u98))))
(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01 set-start-block (get token-x pool-tokens) (get token-y pool-tokens) (get factor pool-tokens) u0))
(print (try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01 get-pool-details (get token-x pool-tokens) (get token-y pool-tokens) (get factor pool-tokens))))
(try! (fold check-err (collect-revenue revenue-list) (ok true)))
(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.migrate-legacy-v2-wl finalise-migrate 'SP3P1P2FDG8M157D713GX1CTRVMKTB83HBQSQB8EG))
(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.migrate-legacy-v2-wl finalise-migrate 'SP204R1B0AAVSJY3C0PR6MVQD2TJGK0NKNRWQXB67))
(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.migrate-legacy-v2-wl finalise-migrate 'SP22K8V74VDB43SZ3W6PQQJVJHTCVG8M4B38MBJ4J))
(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.migrate-legacy-v2-wl finalise-migrate 'SP3NDMC8SEWMBMXBN5NESA7P0FGSEMRMV70J47D6W))
(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.migrate-legacy-v2-wl finalise-migrate 'SP1WFYBVD2SKQQE2TXBKAP23GXY7Q7GP1SBJP0K2Y))
(ok true)))
(define-private (collect-revenue (details (list 500 { token: <ft-trait>, amount: uint })))
(map collect-revenue-iter details))
(define-private (collect-revenue-iter (details { token: <ft-trait>, amount: uint }))
(let (
(token-trait (get token details))
(reserve-bal (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-vault-v2-01 get-reserve (contract-of token-trait))))
(contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-vault-v2-01 remove-from-reserve (contract-of token-trait) (min reserve-bal (get amount details)))))
(define-private (check-err (result (response bool uint)) (prior (response bool uint)))
(match prior ok-value result err-value (err err-value)))
(define-private (min (a uint) (b uint))
(if (> a b) b a))