From 1dc84aa5ebf7b3b73e896fd641dcb9f9f86b2233 Mon Sep 17 00:00:00 2001
From: mariano
Date: Wed, 20 May 2026 09:20:27 +0200
Subject: [PATCH] Stable
---
AGENTS.md | 130 +++
AGENTS_OLD.MD | 66 ++
CHANGELOG.md | 39 +
CORREZIONI_NECESSARIE.md | 77 ++
FIX_HISTORY.md | 18 +
FIX_PERMISSIONS.sh | 27 +
MEMORY.md | 269 +++++
README.md | 37 +
ajax/server_test.php | 57 ++
composer.json | 23 +
ecs.php | 21 +
front/ajax.test.php | 59 ++
front/asset.form.php | 186 ++++
front/config.form.php | 32 +
front/profile.form.php___ | 41 +
front/server.form.php | 64 ++
front/server.php | 48 +
front/server.test.php | 64 ++
front/server.view.php | 42 +
front/server_test.ajax.php | 46 +
front/test.button.php | 43 +
gitflavio/COMMIT_EDITMSG | 1 +
gitflavio/FETCH_HEAD | 1 +
gitflavio/HEAD | 1 +
gitflavio/ORIG_HEAD | 1 +
gitflavio/config | 16 +
gitflavio/description | 1 +
gitflavio/hooks/applypatch-msg.sample | 15 +
gitflavio/hooks/commit-msg.sample | 24 +
gitflavio/hooks/fsmonitor-watchman.sample | 174 ++++
gitflavio/hooks/post-update.sample | 8 +
gitflavio/hooks/pre-applypatch.sample | 14 +
gitflavio/hooks/pre-commit.sample | 49 +
gitflavio/hooks/pre-merge-commit.sample | 13 +
gitflavio/hooks/pre-push.sample | 53 +
gitflavio/hooks/pre-rebase.sample | 169 ++++
gitflavio/hooks/pre-receive.sample | 24 +
gitflavio/hooks/prepare-commit-msg.sample | 42 +
gitflavio/hooks/push-to-checkout.sample | 78 ++
gitflavio/hooks/sendemail-validate.sample | 77 ++
gitflavio/hooks/update.sample | 128 +++
gitflavio/index | Bin 0 -> 5227 bytes
gitflavio/info/exclude | 6 +
gitflavio/logs/HEAD | 12 +
gitflavio/logs/refs/heads/dev | 7 +
gitflavio/logs/refs/heads/main | 3 +
gitflavio/logs/refs/remotes/origin/HEAD | 1 +
gitflavio/logs/refs/remotes/origin/dev | 5 +
gitflavio/logs/refs/remotes/origin/main | 1 +
.../00/bfe6f899a6d08df50fe1151032f7d2432a23fc | Bin 0 -> 548 bytes
.../00/d1fcaaa9d1d9244a8df60ddc4f46845d1a8456 | Bin 0 -> 2241 bytes
.../00/d937889015edc16672a1aec414ccc184c743d7 | Bin 0 -> 1088 bytes
.../01/c931072d5746de24e6323d3f9316655d814740 | Bin 0 -> 835 bytes
.../05/aeab86ec3c5d3cdeac2e7cb0cdbce7af92a5bf | Bin 0 -> 64 bytes
.../0d/8b64bd85c5cf7509028a7cf1cb1646ae9d20e3 | Bin 0 -> 1462 bytes
.../0f/57c04a93e542f698d9ee8d5662296a10dd79f6 | Bin 0 -> 1043 bytes
.../11/2ac1a3d31de40ed19e31ebe2a09969a91ca785 | Bin 0 -> 1266 bytes
.../11/6523d7a24f610648183920620579d30b8e007f | Bin 0 -> 191 bytes
.../13/a1fd4350238bfc24cfb8541036f0bee8e4ca05 | Bin 0 -> 1630 bytes
.../14/e1027489784b717661588cb43caa419eec86bd | Bin 0 -> 1320 bytes
.../17/18114462eb2d4b292baba4edc3c6f79f7c3ea3 | Bin 0 -> 606 bytes
.../18/5b273ec42b62b8ae4f74e59eae70395cc88752 | Bin 0 -> 4528 bytes
.../18/a77d83519ba3e8fd6a17a1b44acb63bc7a50cf | Bin 0 -> 706 bytes
.../1b/210e4c7201ee826cb4f0e479e5486307e9bf7c | Bin 0 -> 5182 bytes
.../1c/8552781a34629a6176355ba50be371ec5166a9 | 7 +
.../1e/bb463168f36028ae98c61581e6c8ff953617d0 | Bin 0 -> 64 bytes
.../1f/9710002aa168ed7592b58b9f2d9e1f3431d30c | Bin 0 -> 1424 bytes
.../20/4ea8b1044799df5f383c9b7489ba8a876a7c03 | Bin 0 -> 70 bytes
.../21/5277ac86967035797e47da0b5010a87ce0b98f | Bin 0 -> 71 bytes
.../24/d8f24f885f3be2c2de581e768885b5caf90c1e | Bin 0 -> 331 bytes
.../25/9e2ef94ae4f4aa5f93125a6551690a28af573b | Bin 0 -> 1632 bytes
.../27/7ad43ceff67cfe1f3867301b6c3552917bcd8e | Bin 0 -> 56 bytes
.../27/aac99d1555a75d373756d8727afeefd6b69376 | 3 +
.../31/1accf4bc2817584dd35d611c7483bfd1f9d70d | Bin 0 -> 173 bytes
.../31/a95026c46ca2c322f0f6770300750573cc58d9 | Bin 0 -> 1060 bytes
.../35/62526c1df22fc0f8d6b6e9463a3adff126413b | Bin 0 -> 672 bytes
.../3a/38bc98a9b989f99c685dacc9a620429c8af5a7 | Bin 0 -> 61 bytes
.../3a/3c4d169ec5ca603e940c6ee57305c4200867df | Bin 0 -> 1447 bytes
.../3a/ec748a00e2437143afbcce9789e9e1c440e86d | Bin 0 -> 115 bytes
.../3b/25f0d2e7ba99cc57fd06590ccad42117d56e1a | Bin 0 -> 499 bytes
.../3d/47b597ecf2e93c4020cdeb910a06b99f02ee39 | 1 +
.../3d/5eba338b0383acac7cbc8bf39ef882ebb52945 | Bin 0 -> 367 bytes
.../41/83ad2c64664c3b69fe68ed12374393ad025e2f | 5 +
.../42/dfeff5d2b6452efa18cff9bc55ef86c254e997 | Bin 0 -> 1412 bytes
.../43/018fccb86a1aa4b66a54a0489bc8fe5e664916 | Bin 0 -> 5171 bytes
.../45/4285ea080576f5db99ff0cd83dd6a7717241a9 | 6 +
.../46/15c1d7cc58efbcfff10d8325a03934f540c569 | Bin 0 -> 1979 bytes
.../46/cd427d457cecc5889a92440131ce63d7a92532 | Bin 0 -> 259 bytes
.../47/f6b90efbf694365d7831eb615591c109ab77b5 | Bin 0 -> 730 bytes
.../4b/3ededa083d208e7ce6e42b8632d295735b2982 | Bin 0 -> 189 bytes
.../4f/21aa1aca615a1fea2786d0c759a4626aba551d | Bin 0 -> 1494 bytes
.../50/5476e9934cac4c29eb6a086daf07671e01517f | Bin 0 -> 1461 bytes
.../52/024d4228f1a54de35513bd1a14dfaeff1ddeb9 | Bin 0 -> 339 bytes
.../52/4523b4454b2c3bc0e88a948fd4789af7bbdae8 | Bin 0 -> 3722 bytes
.../56/eb4d8b0f5bf018d99412161cf1346e29540fe8 | Bin 0 -> 2020 bytes
.../57/41929666cdf91205979ab26c6b6ccdf8a6979a | Bin 0 -> 295 bytes
.../61/b7171b1db577c2de9d43dadd5cc1fecce774dc | Bin 0 -> 634 bytes
.../61/ccf6d74902ab1b4ed510d8dad7df2fb80ff875 | Bin 0 -> 656 bytes
.../61/dd7aa53d6ebb43ca028ef9d2706efa7bd9ee68 | Bin 0 -> 4038 bytes
.../63/ea5c4d83858585a4d32a54f12e00a4c19891cf | Bin 0 -> 1049 bytes
.../64/93631fb88f9a570c95cfab46b89a144a9e9503 | 3 +
.../65/790e7d770de478c167d9435a4b7858346f7072 | Bin 0 -> 769 bytes
.../67/9b0dafccecfb1a9fa9a341853f524b4b52abbf | Bin 0 -> 2948 bytes
.../68/22b2bcae642863ca6e0115924af954e14ccff8 | Bin 0 -> 95 bytes
.../70/dff38c872847e1c23ef1c77594086839a2f985 | Bin 0 -> 1206 bytes
.../79/2e374a39495bd4ce54bdb1efab74ef749b90b8 | Bin 0 -> 115 bytes
.../79/32e201a26405962f2f20e3d55c57236c152f91 | Bin 0 -> 689 bytes
.../7c/48ca70eca8ed15e3a8ea9f9d54c1a465501a40 | 2 +
.../7d/28b1fb6885c2730f3eb871bc63936c1dc5ebb2 | Bin 0 -> 1003 bytes
.../7f/c40925047551dbc6f31069af430848dc862bb2 | Bin 0 -> 155 bytes
.../88/1b6ebdd497616c0eaf0688fdb79edc758a396b | Bin 0 -> 359 bytes
.../90/a894f2dbef8d9efdeb61db05f659cd7078e4da | Bin 0 -> 424 bytes
.../98/dc9fafeb52a5c6d0130be29d5716133e086821 | Bin 0 -> 154 bytes
.../9a/73f51de5135da21bbc52ca183bf1e9a48cd0f2 | 2 +
.../9b/126e9f343807b3e4e2f4b99a1fe4336007512f | Bin 0 -> 1351 bytes
.../9b/419ab1e2420866e6abbb7bde1e53713f021514 | Bin 0 -> 394 bytes
.../9c/730d7a658305cc598ea196667e6dadc80389b3 | Bin 0 -> 1515 bytes
.../a0/09d2026d6ca35505c7a633ca47f58a500ff22d | Bin 0 -> 71 bytes
.../a0/e5cf00708a67b4a8c24095983f946518631d86 | 1 +
.../a3/011e81556e83afc2c1532d34c2f716cbbc3c00 | Bin 0 -> 548 bytes
.../a8/ab1151db2e98478a1b23997064651e00869362 | Bin 0 -> 7480 bytes
.../a9/0e9d8c9a116fe031f668b5eb45aab856b51f1a | Bin 0 -> 360 bytes
.../a9/4bc3b018e6fac2225f73c4fb627f77e2ddf4e6 | Bin 0 -> 802 bytes
.../ac/388d55f65eb170a37b388b33527bfcd8362edd | Bin 0 -> 126 bytes
.../b0/0c568aa35f2f52dc581f4c17fb444d02c3410a | Bin 0 -> 56 bytes
.../b1/45d5cc6f46344f5901e4c22eb4a2a17463cea3 | Bin 0 -> 239 bytes
.../b3/66f2ae913116428c52594f39f6985fdede6283 | Bin 0 -> 701 bytes
.../b7/bffdd64ff74d4165aa49ecf2fa49006d0f9334 | Bin 0 -> 172 bytes
.../b9/2df0384658e96222ff592605ad63b8da5b2251 | Bin 0 -> 346 bytes
.../b9/e4a6d1083532b8c383ed2e3eea7be67ca93e1d | Bin 0 -> 7404 bytes
.../ba/3596df07d580af1ec86456251d1fa22a438c78 | Bin 0 -> 880 bytes
.../bc/c2b35da1d4bbc24fd1f1d15c3899ef9a469bd5 | 2 +
.../c2/5da0a8ba00702846b95750dfb1bc8213891515 | Bin 0 -> 1400 bytes
.../c3/bc354ed51f43a0e22b08170a0ec7989a191dcf | Bin 0 -> 862 bytes
.../c3/c45feb44e821bc8970aa86d39378d7ffbb2e65 | Bin 0 -> 108 bytes
.../c4/99fd993f6fd97f81f66884726008ad9d58b612 | Bin 0 -> 753 bytes
.../c6/a533649e8b8fa17ab9edd519bc838be7cc0f8b | Bin 0 -> 586 bytes
.../c9/fd16c541466c9c5a4148ae75b2a0d1f47f466e | Bin 0 -> 63 bytes
.../d1/54409013d1944a2052775807d2bc4063178d20 | Bin 0 -> 6906 bytes
.../d6/2f168a7ab0e42e573296c8814047441a861605 | Bin 0 -> 126 bytes
.../d6/57b40685bcee4c0783c793d487e8c1bab223e0 | Bin 0 -> 753 bytes
.../d8/db92be2d9783d478afafd00b3a5ef014055f5b | Bin 0 -> 1786 bytes
.../db/0bb8cad5e4e4749f9bcf95c7da066d9339eec0 | 6 +
.../de/e63d0b4ae892fcc836df19d655ef78fba0df91 | Bin 0 -> 753 bytes
.../e0/83fa81a6c387fc8ac548e8bc399b8335d781ef | Bin 0 -> 359 bytes
.../e3/a5f4a180ecfd4e6b68f783989b3b9789b26fb6 | Bin 0 -> 126 bytes
.../e4/e4b5179c616789e7dbdd52cb86a5becd0a9c14 | Bin 0 -> 1242 bytes
.../e5/0adaeacd7429ac492c7f1a7213055c90458eb7 | 4 +
.../e6/bb5deaba73fdea1c97b9c09bc810a9c92fa72d | Bin 0 -> 648 bytes
.../e7/b85297d4141c5e4190b68433d8e1cd5664c6a3 | Bin 0 -> 753 bytes
.../f0/0e847952b9239ced8dccdc0af19b68ebfb7d3d | Bin 0 -> 623 bytes
.../f1/f8001c76b95c16e22b018bb0e02fca8dece54f | Bin 0 -> 188 bytes
.../f6/727eda1e7bfd0a868ff93615a04b44b928c76d | Bin 0 -> 5014 bytes
.../f8/5893a04200dc8c30e75955bb12d4905110d2ff | Bin 0 -> 802 bytes
.../fc/e0dd97ed72cbc3b85c8310bfee8247bcf6d1b5 | Bin 0 -> 824 bytes
.../ff/d908df1af4d233249c5bf9a88dff36419a192c | Bin 0 -> 1282 bytes
...f64c98dc9785f95395d0429bffba92412a8d22.idx | Bin 0 -> 3284 bytes
...64c98dc9785f95395d0429bffba92412a8d22.pack | Bin 0 -> 46673 bytes
...f64c98dc9785f95395d0429bffba92412a8d22.rev | Bin 0 -> 368 bytes
gitflavio/opencode | 1 +
gitflavio/packed-refs | 3 +
gitflavio/refs/heads/dev | 1 +
gitflavio/refs/heads/main | 1 +
gitflavio/refs/remotes/origin/HEAD | 1 +
gitflavio/refs/remotes/origin/dev | 1 +
gitflavio/refs/remotes/origin/main | 1 +
hook.php | 71 ++
install/install.php | 348 +++++++
install/mysql/plugin_urbackup-empty.sql | 69 ++
install/uninstall.php | 59 ++
js/urbackup.js | 87 ++
locales/de_DE.mo | Bin 0 -> 3126 bytes
locales/de_DE.po | 158 +++
locales/en_GB.mo | Bin 0 -> 2979 bytes
locales/en_GB.po | 158 +++
locales/it_IT.mo | Bin 0 -> 3083 bytes
locales/it_IT.po | 158 +++
phpstan.neon | 12 +
public/css/urbackup.css | 12 +
public/js/urbackup.js | 82 ++
remove_deprecated_files.sh | 11 +
setup.php | 178 ++++
src/AssetTab.php | 913 +++++++++++++++++
src/Command/TestApiCommand.php | 56 ++
src/Config.php | 414 ++++++++
src/Controller/AssetController.php | 193 ++++
src/Controller/ConfigController.php | 45 +
src/Controller/ServerController.php | 109 ++
src/LocationHelper.php | 119 +++
src/MassiveAction.php | 264 +++++
src/Profile.php | 246 +++++
src/Server.php | 942 ++++++++++++++++++
src/ServerAsset.php | 291 ++++++
src/UrbackupApiClient.php | 766 ++++++++++++++
templates/asset/asset_tab.html.twig | 77 ++
templates/config/config.html.twig | 39 +
templates/profile.html.twig | 34 +
templates/server/server_form.html.twig | 118 +++
templates/server/server_list.html.twig | 51 +
199 files changed, 8444 insertions(+)
create mode 100644 AGENTS.md
create mode 100644 AGENTS_OLD.MD
create mode 100644 CHANGELOG.md
create mode 100644 CORREZIONI_NECESSARIE.md
create mode 100644 FIX_HISTORY.md
create mode 100755 FIX_PERMISSIONS.sh
create mode 100644 MEMORY.md
create mode 100644 README.md
create mode 100644 ajax/server_test.php
create mode 100644 composer.json
create mode 100644 ecs.php
create mode 100644 front/ajax.test.php
create mode 100644 front/asset.form.php
create mode 100644 front/config.form.php
create mode 100644 front/profile.form.php___
create mode 100644 front/server.form.php
create mode 100644 front/server.php
create mode 100644 front/server.test.php
create mode 100644 front/server.view.php
create mode 100644 front/server_test.ajax.php
create mode 100644 front/test.button.php
create mode 100644 gitflavio/COMMIT_EDITMSG
create mode 100644 gitflavio/FETCH_HEAD
create mode 100644 gitflavio/HEAD
create mode 100644 gitflavio/ORIG_HEAD
create mode 100644 gitflavio/config
create mode 100644 gitflavio/description
create mode 100755 gitflavio/hooks/applypatch-msg.sample
create mode 100755 gitflavio/hooks/commit-msg.sample
create mode 100755 gitflavio/hooks/fsmonitor-watchman.sample
create mode 100755 gitflavio/hooks/post-update.sample
create mode 100755 gitflavio/hooks/pre-applypatch.sample
create mode 100755 gitflavio/hooks/pre-commit.sample
create mode 100755 gitflavio/hooks/pre-merge-commit.sample
create mode 100755 gitflavio/hooks/pre-push.sample
create mode 100755 gitflavio/hooks/pre-rebase.sample
create mode 100755 gitflavio/hooks/pre-receive.sample
create mode 100755 gitflavio/hooks/prepare-commit-msg.sample
create mode 100755 gitflavio/hooks/push-to-checkout.sample
create mode 100755 gitflavio/hooks/sendemail-validate.sample
create mode 100755 gitflavio/hooks/update.sample
create mode 100644 gitflavio/index
create mode 100644 gitflavio/info/exclude
create mode 100644 gitflavio/logs/HEAD
create mode 100644 gitflavio/logs/refs/heads/dev
create mode 100644 gitflavio/logs/refs/heads/main
create mode 100644 gitflavio/logs/refs/remotes/origin/HEAD
create mode 100644 gitflavio/logs/refs/remotes/origin/dev
create mode 100644 gitflavio/logs/refs/remotes/origin/main
create mode 100644 gitflavio/objects/00/bfe6f899a6d08df50fe1151032f7d2432a23fc
create mode 100644 gitflavio/objects/00/d1fcaaa9d1d9244a8df60ddc4f46845d1a8456
create mode 100644 gitflavio/objects/00/d937889015edc16672a1aec414ccc184c743d7
create mode 100644 gitflavio/objects/01/c931072d5746de24e6323d3f9316655d814740
create mode 100644 gitflavio/objects/05/aeab86ec3c5d3cdeac2e7cb0cdbce7af92a5bf
create mode 100644 gitflavio/objects/0d/8b64bd85c5cf7509028a7cf1cb1646ae9d20e3
create mode 100644 gitflavio/objects/0f/57c04a93e542f698d9ee8d5662296a10dd79f6
create mode 100644 gitflavio/objects/11/2ac1a3d31de40ed19e31ebe2a09969a91ca785
create mode 100644 gitflavio/objects/11/6523d7a24f610648183920620579d30b8e007f
create mode 100644 gitflavio/objects/13/a1fd4350238bfc24cfb8541036f0bee8e4ca05
create mode 100644 gitflavio/objects/14/e1027489784b717661588cb43caa419eec86bd
create mode 100644 gitflavio/objects/17/18114462eb2d4b292baba4edc3c6f79f7c3ea3
create mode 100644 gitflavio/objects/18/5b273ec42b62b8ae4f74e59eae70395cc88752
create mode 100644 gitflavio/objects/18/a77d83519ba3e8fd6a17a1b44acb63bc7a50cf
create mode 100644 gitflavio/objects/1b/210e4c7201ee826cb4f0e479e5486307e9bf7c
create mode 100644 gitflavio/objects/1c/8552781a34629a6176355ba50be371ec5166a9
create mode 100644 gitflavio/objects/1e/bb463168f36028ae98c61581e6c8ff953617d0
create mode 100644 gitflavio/objects/1f/9710002aa168ed7592b58b9f2d9e1f3431d30c
create mode 100644 gitflavio/objects/20/4ea8b1044799df5f383c9b7489ba8a876a7c03
create mode 100644 gitflavio/objects/21/5277ac86967035797e47da0b5010a87ce0b98f
create mode 100644 gitflavio/objects/24/d8f24f885f3be2c2de581e768885b5caf90c1e
create mode 100644 gitflavio/objects/25/9e2ef94ae4f4aa5f93125a6551690a28af573b
create mode 100644 gitflavio/objects/27/7ad43ceff67cfe1f3867301b6c3552917bcd8e
create mode 100644 gitflavio/objects/27/aac99d1555a75d373756d8727afeefd6b69376
create mode 100644 gitflavio/objects/31/1accf4bc2817584dd35d611c7483bfd1f9d70d
create mode 100644 gitflavio/objects/31/a95026c46ca2c322f0f6770300750573cc58d9
create mode 100644 gitflavio/objects/35/62526c1df22fc0f8d6b6e9463a3adff126413b
create mode 100644 gitflavio/objects/3a/38bc98a9b989f99c685dacc9a620429c8af5a7
create mode 100644 gitflavio/objects/3a/3c4d169ec5ca603e940c6ee57305c4200867df
create mode 100644 gitflavio/objects/3a/ec748a00e2437143afbcce9789e9e1c440e86d
create mode 100644 gitflavio/objects/3b/25f0d2e7ba99cc57fd06590ccad42117d56e1a
create mode 100644 gitflavio/objects/3d/47b597ecf2e93c4020cdeb910a06b99f02ee39
create mode 100644 gitflavio/objects/3d/5eba338b0383acac7cbc8bf39ef882ebb52945
create mode 100644 gitflavio/objects/41/83ad2c64664c3b69fe68ed12374393ad025e2f
create mode 100644 gitflavio/objects/42/dfeff5d2b6452efa18cff9bc55ef86c254e997
create mode 100644 gitflavio/objects/43/018fccb86a1aa4b66a54a0489bc8fe5e664916
create mode 100644 gitflavio/objects/45/4285ea080576f5db99ff0cd83dd6a7717241a9
create mode 100644 gitflavio/objects/46/15c1d7cc58efbcfff10d8325a03934f540c569
create mode 100644 gitflavio/objects/46/cd427d457cecc5889a92440131ce63d7a92532
create mode 100644 gitflavio/objects/47/f6b90efbf694365d7831eb615591c109ab77b5
create mode 100644 gitflavio/objects/4b/3ededa083d208e7ce6e42b8632d295735b2982
create mode 100644 gitflavio/objects/4f/21aa1aca615a1fea2786d0c759a4626aba551d
create mode 100644 gitflavio/objects/50/5476e9934cac4c29eb6a086daf07671e01517f
create mode 100644 gitflavio/objects/52/024d4228f1a54de35513bd1a14dfaeff1ddeb9
create mode 100644 gitflavio/objects/52/4523b4454b2c3bc0e88a948fd4789af7bbdae8
create mode 100644 gitflavio/objects/56/eb4d8b0f5bf018d99412161cf1346e29540fe8
create mode 100644 gitflavio/objects/57/41929666cdf91205979ab26c6b6ccdf8a6979a
create mode 100644 gitflavio/objects/61/b7171b1db577c2de9d43dadd5cc1fecce774dc
create mode 100644 gitflavio/objects/61/ccf6d74902ab1b4ed510d8dad7df2fb80ff875
create mode 100644 gitflavio/objects/61/dd7aa53d6ebb43ca028ef9d2706efa7bd9ee68
create mode 100644 gitflavio/objects/63/ea5c4d83858585a4d32a54f12e00a4c19891cf
create mode 100644 gitflavio/objects/64/93631fb88f9a570c95cfab46b89a144a9e9503
create mode 100644 gitflavio/objects/65/790e7d770de478c167d9435a4b7858346f7072
create mode 100644 gitflavio/objects/67/9b0dafccecfb1a9fa9a341853f524b4b52abbf
create mode 100644 gitflavio/objects/68/22b2bcae642863ca6e0115924af954e14ccff8
create mode 100644 gitflavio/objects/70/dff38c872847e1c23ef1c77594086839a2f985
create mode 100644 gitflavio/objects/79/2e374a39495bd4ce54bdb1efab74ef749b90b8
create mode 100644 gitflavio/objects/79/32e201a26405962f2f20e3d55c57236c152f91
create mode 100644 gitflavio/objects/7c/48ca70eca8ed15e3a8ea9f9d54c1a465501a40
create mode 100644 gitflavio/objects/7d/28b1fb6885c2730f3eb871bc63936c1dc5ebb2
create mode 100644 gitflavio/objects/7f/c40925047551dbc6f31069af430848dc862bb2
create mode 100644 gitflavio/objects/88/1b6ebdd497616c0eaf0688fdb79edc758a396b
create mode 100644 gitflavio/objects/90/a894f2dbef8d9efdeb61db05f659cd7078e4da
create mode 100644 gitflavio/objects/98/dc9fafeb52a5c6d0130be29d5716133e086821
create mode 100644 gitflavio/objects/9a/73f51de5135da21bbc52ca183bf1e9a48cd0f2
create mode 100644 gitflavio/objects/9b/126e9f343807b3e4e2f4b99a1fe4336007512f
create mode 100644 gitflavio/objects/9b/419ab1e2420866e6abbb7bde1e53713f021514
create mode 100644 gitflavio/objects/9c/730d7a658305cc598ea196667e6dadc80389b3
create mode 100644 gitflavio/objects/a0/09d2026d6ca35505c7a633ca47f58a500ff22d
create mode 100644 gitflavio/objects/a0/e5cf00708a67b4a8c24095983f946518631d86
create mode 100644 gitflavio/objects/a3/011e81556e83afc2c1532d34c2f716cbbc3c00
create mode 100644 gitflavio/objects/a8/ab1151db2e98478a1b23997064651e00869362
create mode 100644 gitflavio/objects/a9/0e9d8c9a116fe031f668b5eb45aab856b51f1a
create mode 100644 gitflavio/objects/a9/4bc3b018e6fac2225f73c4fb627f77e2ddf4e6
create mode 100644 gitflavio/objects/ac/388d55f65eb170a37b388b33527bfcd8362edd
create mode 100644 gitflavio/objects/b0/0c568aa35f2f52dc581f4c17fb444d02c3410a
create mode 100644 gitflavio/objects/b1/45d5cc6f46344f5901e4c22eb4a2a17463cea3
create mode 100644 gitflavio/objects/b3/66f2ae913116428c52594f39f6985fdede6283
create mode 100644 gitflavio/objects/b7/bffdd64ff74d4165aa49ecf2fa49006d0f9334
create mode 100644 gitflavio/objects/b9/2df0384658e96222ff592605ad63b8da5b2251
create mode 100644 gitflavio/objects/b9/e4a6d1083532b8c383ed2e3eea7be67ca93e1d
create mode 100644 gitflavio/objects/ba/3596df07d580af1ec86456251d1fa22a438c78
create mode 100644 gitflavio/objects/bc/c2b35da1d4bbc24fd1f1d15c3899ef9a469bd5
create mode 100644 gitflavio/objects/c2/5da0a8ba00702846b95750dfb1bc8213891515
create mode 100644 gitflavio/objects/c3/bc354ed51f43a0e22b08170a0ec7989a191dcf
create mode 100644 gitflavio/objects/c3/c45feb44e821bc8970aa86d39378d7ffbb2e65
create mode 100644 gitflavio/objects/c4/99fd993f6fd97f81f66884726008ad9d58b612
create mode 100644 gitflavio/objects/c6/a533649e8b8fa17ab9edd519bc838be7cc0f8b
create mode 100644 gitflavio/objects/c9/fd16c541466c9c5a4148ae75b2a0d1f47f466e
create mode 100644 gitflavio/objects/d1/54409013d1944a2052775807d2bc4063178d20
create mode 100644 gitflavio/objects/d6/2f168a7ab0e42e573296c8814047441a861605
create mode 100644 gitflavio/objects/d6/57b40685bcee4c0783c793d487e8c1bab223e0
create mode 100644 gitflavio/objects/d8/db92be2d9783d478afafd00b3a5ef014055f5b
create mode 100644 gitflavio/objects/db/0bb8cad5e4e4749f9bcf95c7da066d9339eec0
create mode 100644 gitflavio/objects/de/e63d0b4ae892fcc836df19d655ef78fba0df91
create mode 100644 gitflavio/objects/e0/83fa81a6c387fc8ac548e8bc399b8335d781ef
create mode 100644 gitflavio/objects/e3/a5f4a180ecfd4e6b68f783989b3b9789b26fb6
create mode 100644 gitflavio/objects/e4/e4b5179c616789e7dbdd52cb86a5becd0a9c14
create mode 100644 gitflavio/objects/e5/0adaeacd7429ac492c7f1a7213055c90458eb7
create mode 100644 gitflavio/objects/e6/bb5deaba73fdea1c97b9c09bc810a9c92fa72d
create mode 100644 gitflavio/objects/e7/b85297d4141c5e4190b68433d8e1cd5664c6a3
create mode 100644 gitflavio/objects/f0/0e847952b9239ced8dccdc0af19b68ebfb7d3d
create mode 100644 gitflavio/objects/f1/f8001c76b95c16e22b018bb0e02fca8dece54f
create mode 100644 gitflavio/objects/f6/727eda1e7bfd0a868ff93615a04b44b928c76d
create mode 100644 gitflavio/objects/f8/5893a04200dc8c30e75955bb12d4905110d2ff
create mode 100644 gitflavio/objects/fc/e0dd97ed72cbc3b85c8310bfee8247bcf6d1b5
create mode 100644 gitflavio/objects/ff/d908df1af4d233249c5bf9a88dff36419a192c
create mode 100644 gitflavio/objects/pack/pack-16f64c98dc9785f95395d0429bffba92412a8d22.idx
create mode 100644 gitflavio/objects/pack/pack-16f64c98dc9785f95395d0429bffba92412a8d22.pack
create mode 100644 gitflavio/objects/pack/pack-16f64c98dc9785f95395d0429bffba92412a8d22.rev
create mode 100644 gitflavio/opencode
create mode 100644 gitflavio/packed-refs
create mode 100644 gitflavio/refs/heads/dev
create mode 100644 gitflavio/refs/heads/main
create mode 100644 gitflavio/refs/remotes/origin/HEAD
create mode 100644 gitflavio/refs/remotes/origin/dev
create mode 100644 gitflavio/refs/remotes/origin/main
create mode 100644 hook.php
create mode 100644 install/install.php
create mode 100644 install/mysql/plugin_urbackup-empty.sql
create mode 100644 install/uninstall.php
create mode 100644 js/urbackup.js
create mode 100644 locales/de_DE.mo
create mode 100644 locales/de_DE.po
create mode 100644 locales/en_GB.mo
create mode 100644 locales/en_GB.po
create mode 100644 locales/it_IT.mo
create mode 100644 locales/it_IT.po
create mode 100644 phpstan.neon
create mode 100644 public/css/urbackup.css
create mode 100644 public/js/urbackup.js
create mode 100755 remove_deprecated_files.sh
create mode 100644 setup.php
create mode 100644 src/AssetTab.php
create mode 100644 src/Command/TestApiCommand.php
create mode 100644 src/Config.php
create mode 100644 src/Controller/AssetController.php
create mode 100644 src/Controller/ConfigController.php
create mode 100644 src/Controller/ServerController.php
create mode 100644 src/LocationHelper.php
create mode 100644 src/MassiveAction.php
create mode 100644 src/Profile.php
create mode 100644 src/Server.php
create mode 100644 src/ServerAsset.php
create mode 100644 src/UrbackupApiClient.php
create mode 100644 templates/asset/asset_tab.html.twig
create mode 100644 templates/config/config.html.twig
create mode 100644 templates/profile.html.twig
create mode 100644 templates/server/server_form.html.twig
create mode 100644 templates/server/server_list.html.twig
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..524523b
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,130 @@
+# AGENTS.md - AI Assistant per lo Sviluppo Plugin GLPI 11.x
+
+## 🎯 Ruolo e Obiettivo
+Sei un **Senior GLPI Plugin Architect & PHP/Symfony Engineer**. Il tuo compito è progettare, generare e validare plugin per **GLPI 11.0.6 e successivi**, garantendo:
+- ✅ Compatibilità 100% con GLPI 11.x (architettura moderna, namespacing, composer)
+- ✅ Esecuzione su **PHP 8.3 e PHP 8.4** con strict mode attivo
+- ✅ Integrazione corretta con i componenti **Symfony** esposti da GLPI core
+- ✅ Sicurezza, performance e manutenibilità enterprise-grade
+- ✅ Codice pronto per il Marketplace GLPI e deployment production
+---
+
+## 📜 Direttive Fondamentali
+1. **Nessuna supposizione**: Usa solo API, classi e hook documentati per GLPI 11.0.6+. Se un'API è incerta, richiedi conferma o fornisci fallback compatibili.
+2. **Ciclo di vita rigoroso**: Rispetta obbligatoriamente `plugin_init_*`, `plugin_install_*`, `plugin_upgrade_*`, `plugin_uninstall_*`, `plugin_version_*`.
+3. **Namespacing & Autoloading**: Tutte le classi devono risiedere in `src/` con namespace `Plugin\\`. Usa `composer.json` PSR-4.
+4. **Strict PHP 8.3/8.4**: `declare(strict_types=1);` in ogni file. Usa typed properties, `readonly` classi, `#[\Override]`, `match`, enums, e nuove funzioni PHP 8.4 (`json_validate()`, `str_increment()`, ecc.) solo dove compatibili.
+5. **Niente framework Symfony completo**: Usa esclusivamente i componenti già caricati da GLPI core (`symfony/console`, `symfony/http-foundation`, `symfony/validator`, `symfony/routing`, `symfony/cache`). Non includere `symfony/symfony` o bundle esterni.
+6. **Sicurezza prima di tutto**: CSRF token obbligatorio per POST/AJAX, prepared statements sempre, escape output (`Html::entities_deep()`), validazione input con Symfony Validator o GLPI native, controllo diritti (`Session::haveRight()`).
+7. **Memoria**:dopo ogni modifica funzionante scrivi il file MEMORY.md e rileggi AGENTS.md
+---
+
+## 🛠 Stack Tecnologico e Compatibilità
+| Componente | Versione/Requisito | Note |
+|------------|-------------------|------|
+| **GLPI** | `>= 11.0.6` | Verifica `defined('GLPI_VERSION')` e `version_compare()` in `setup.php` |
+| **PHP** | `8.3.x` o `8.4.x` | `strict_types=1`, JIT abilitato, nessuna funzione deprecata |
+| **Database** | MySQL/MariaDB `10.5+` | Usa `$DB->request()`, `QueryExpression`, mai SQL raw non parametrizzato |
+| **Symfony** | Componenti integrati in GLPI 11 | Autoloading via GLPI, nessun composer require esterno |
+| **Frontend** | Twig (compatibile GLPI), JS vanilla/Vite, CSS/SCSS | Template in `templates/`, AJAX in `ajax/` |
+| **Testing** | PHPUnit 10+, PHPStan 8+/Psalm strict | Mock di `$DB`, `$_SESSION`, `Auth`, `Session` |
+
+---
+
+## 🏗 Architettura Plugin GLPI 11.0.6+
+```
+plugin_/
+├── composer.json # PSR-4, dipendenze lockate, no symfony/symfony
+├── setup.php # Metadati, check versione, hook init
+├── hook.php # install, upgrade, uninstall, data injection
+├── plugin.xml # Marketplace metadata (opzionale)
+├── src/ # Classi namespaced Plugin\\
+│ ├── Controller/
+│ ├── Entity/
+│ ├── Service/
+│ └── Validator/
+├── templates/ # Twig compatibili GLPI
+├── ajax/ # Endpoint PHP con CSRF & permessi
+├── install/ # Migrazioni SQL versionate
+├── locales/ # File .po/.mo per i18n
+├── css/ & js/ # Asset frontend
+└── README.md # Istruzioni installazione, requisiti, changelog
+```
+
+### Hook Essenziali (`hook.php`)
+- `plugin_install_()`: Crea tabelle, configura diritti, registra classi
+- `plugin_upgrade_($version)`: Migrazione step-by-step con controllo versione DB
+- `plugin_uninstall_()`: Drop tabelle, pulizia diritti, rimozione config
+- `plugin_datainjection_populate_()`: Supporto DataInjection (opzionale)
+
+---
+
+## 🔄 Workflow di Sviluppo (Output Obbligatorio dell'IA)
+Per ogni richiesta, l'IA deve restituire:
+1. 📁 **Struttura ad albero** completa del plugin
+2. 📄 `setup.php` con check versione GLPI, namespace, metadata marketplace
+3. 🔌 `hook.php` con install/upgrade/uninstall robusti e transazionali
+4. 🧩 Classi `src/` con DI, validazione, logging (`Glpi\Log` o `Toolbox::logDebug()`)
+5. 🌐 Endpoint `ajax/` con CSRF, `Session::checkCSRF()`, output JSON strutturato
+6. 🗃️ Migrazioni `install/` con versioning e rollback sicuro
+7. 📦 `composer.json` con autoloading PSR-4 e dipendenze necessarie
+8. 🧪 Istruzioni di test, comandi CLI e troubleshooting
+9. ✅ Checklist di validazione pre-consegna
+
+---
+
+## ✅ Standard di Qualità e Sicurezza
+- **PSR-12 / PSR-4** applicati rigorosamente
+- **PHPDoc** completo per classi pubbliche e metodi
+- **Nessun warning/deprecation** PHP 8.3/8.4 o GLPI 11
+- **Cache**: Usa `Glpi\Cache` o `symfony/cache` dove appropriato
+- **Logging**: `Glpi\Log\Logger` o `Toolbox::logDebug()` per trace
+- **i18n**: Tutte le stringhe utente in `__()` e `__n()`, file `.pot` generabili
+- **Permessi**: `Session::haveRight('plugin_', READ/UPDATE/CREATE/DELETE)`
+- **Output**: Escape HTML, JSON con `header('Content-Type: application/json')`
+
+---
+
+## 🧪 Testing e Validazione
+L'IA deve includere o suggerire:
+- ✅ Test unitari PHPUnit con mock di `$DB`, `Session`, `Auth`
+- ✅ Test CSRF, SQL injection, XSS, privilege escalation
+- ✅ Validazione input con `Symfony\Component\Validator`
+- ✅ Compatibilità PHP 8.3/8.4 verificata con `php -l` e runtime check
+- ✅ Istruzioni per ambiente di test Docker (`docker-glpi` ufficiale)
+- ✅ Comandi: `php bin/console glpi:plugin:install `, `glpi:plugin:activate`
+
+---
+
+## 🤖 Comportamento dell'IA
+- 🗣️ Rispondi in **italiano tecnico chiaro**, senza fronzoli
+- 📦 Fornisci **codice completo**, non snippet parziali o placeholder
+- 🔍 Spiega **scelte architetturali**, alternative e trade-off
+- ⚠️ Segnala **incompatibilità note** con GLPI 11.x o PHP 8.4
+- 📝 Usa blocchi markdown con linguaggio specifico (`php`, `json`, `sql`, `bash`)
+- ❌ Non inventare API GLPI non documentate; se incerto, chiedi conferma o fornisci fallback
+- 📋 Includi sempre: struttura, comandi installazione, troubleshooting, checklist finale
+
+### Checklist Pre-Consegna (Obbligatoria)
+- [ ] `declare(strict_types=1);` in ogni file PHP
+- [ ] Namespace `Plugin\\` e PSR-4 corretto
+- [ ] Check versione GLPI 11.0.6+ in `setup.php`
+- [ ] CSRF e permessi su ogni POST/AJAX
+- [ ] Query parametrizzate o `$DB->request()`
+- [ ] Output escaped e loggato
+- [ ] Nessun uso di API deprecate GLPI 11
+- [ ] Compatibilità PHP 8.3/8.4 verificata
+- [ ] Istruzioni installazione e test incluse
+
+---
+
+## 📚 Risorse e Riferimenti Ufficiali
+- 📘 [GLPI 11 Plugin Development Guide](https://glpi-project.org/documentation/)
+- 🔗 [GLPI GitHub - Plugin Examples](https://github.com/glpi-project)
+- 🐘 [PHP 8.3/8.4 Migration & New Features](https://www.php.net/manual/en/migration83.php)
+- 🧩 [Symfony Components (compatibili con GLPI)](https://symfony.com/components)
+- 🔍 [PHPStan/Psalm Config for GLPI Plugins](https://phpstan.org/)
+- 🐳 [Official GLPI Docker for Testing](https://github.com/glpi-project/docker)
+
+---
+> ⚙️ **Nota per l'IA**: Questo file è un system prompt operativo. Ogni risposta deve aderire rigidamente a queste direttive. Se un requisito confligge con GLPI 11.x o PHP 8.4, segnalalo esplicitamente e proponi un'alternativa conforme. Non generare codice non verificabile.
diff --git a/AGENTS_OLD.MD b/AGENTS_OLD.MD
new file mode 100644
index 0000000..4f21aa1
--- /dev/null
+++ b/AGENTS_OLD.MD
@@ -0,0 +1,66 @@
+# Istruzioni per lo Sviluppo PHP 8.3 & Symfony
+
+Sei un esperto Senior Developer specializzato in Symfony (6.4+) e PHP 8.3.
+
+## Regole del Codice (PHP 8.3)
+
+- Usa sempre la **Constructor Promotion** per la Dependency Injection.
+
+- Utilizza le **Readonly Classes** quando possibile per gli oggetti immutabili (DTO).
+
+- Applica **Typed Class Constants** (novità PHP 8.3).
+
+- Sfrutta l'operatore `clone` con le espressioni e le funzioni `json_validate()`.
+
+- Rigorosa tipizzazione: usa `declare(strict_types=1);` in ogni nuovo file.
+
+## Standard Symfony
+
+- **Attributes ONLY**: Non usare mai YAML o XML per routing, Doctrine o validazione. Usa solo PHP Attributes.
+
+- **Service Container**: Prediligi l'autowiring.
+
+- **Repository**: Usa il pattern moderno (estendendo `ServiceEntityRepository`).
+
+- **Security**: Usa sempre `#[IsGranted()]` nei controller invece di `denyAccessUnlessGranted()`.
+
+## Workflow di Risoluzione Errori
+
+1. Prima di ogni modifica, analizza i file esistenti per capire lo stile del progetto.
+
+2. Dopo aver scritto codice, esegui internamente: `vendor/bin/phpstan analyse`.
+
+3. Se ci sono errori di stile, correggi con: `vendor/bin/ecs check --fix`.
+
+4. In caso di refactoring complesso, usa `vendor/bin/rector process --dry-run` e mostrami il piano.
+
+## Memoria degli Errori
+
+- Leggi sempre il file `FIX_HISTORY.md` per non ripetere bug già risolti in passato.
+
+- Ogni volta che risolviamo un bug critico, chiedimi di aggiornare `FIX_HISTORY.md`.
+
+
+## Standard GLPI 11 (Obbligatori)
+
+- **Namespace PSR-4**: Tutte le classi dei plugin devono trovarsi in `src/` e usare il namespace `GlpiPlugin\Nomeplugin\`. La cartella `inc/` è deprecata.
+
+- **Entry Point**: Ricorda che GLPI 11 centralizza le richieste su `/public/index.php`. Non generare script PHP accessibili direttamente nella root del plugin.
+
+- **Assets Statici**: Sposta JS, CSS e immagini nella cartella `public/` del plugin per la compatibilità con il nuovo web server root.
+
+- **Naming Convention Database**:
+
+ - Prefisso tabelle: `glpi_plugin_[nomeplugin]_[nometabella]`.
+
+ - Chiavi esterne: Devono terminare in `_id` senza vincoli di `CONSTRAINT` nativi (GLPI non usa foreign keys a livello DB).
+
+- **Input Handling**: GLPI 11 ha rimosso l'auto-sanitizzazione delle variabili. Usa sempre i metodi del core per pulire i dati prima delle query SQL o dell'output.
+
+## Integrazione Symfony in GLPI 11
+
+- Usa i **Controller Symfony** per le nuove rotte dei plugin.
+
+- Sfrutta il **Twig Template Engine** situato in `templates/` per la UI.
+
+- Definisci i comandi CLI tramite il componente Console di Symfony.
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..3a86d2a
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,39 @@
+# Changelog – UrBackup Plugin for GLPI
+
+## [0.4.0] – 2026‑04‑29
+### Added
+- Integrazione completa API UrBackup
+- Stato client e server in tempo reale
+- Azioni backup file / image
+- Gestione Internet mode e default_dirs
+- Creazione ed eliminazione client UrBackup
+- Visualizzazione backup recenti e log
+- Collegamento automatico client ↔ asset
+- Pulsante test connessione API
+- Supporto multi‑lingua (IT / EN / DE)
+- Gestione root location per sub‑location
+
+### Fixed
+- Gestione IP mismatch client
+- Sicurezza CSRF
+- Controllo ACL su tutte le azioni
+
+---
+
+## [0.3.0]
+- Tab UrBackup sugli asset
+- Massive actions collega/disconnetti
+- ACL profili
+
+---
+
+## [0.2.0]
+- CRUD server UrBackup
+- Configurazione asset
+- Install / uninstall via Migration
+
+---
+
+## [0.1.0]
+- Struttura iniziale plugin
+- Compatibilità GLPI 11
\ No newline at end of file
diff --git a/CORREZIONI_NECESSARIE.md b/CORREZIONI_NECESSARIE.md
new file mode 100644
index 0000000..7d28b1f
--- /dev/null
+++ b/CORREZIONI_NECESSARIE.md
@@ -0,0 +1,77 @@
+# Correzioni Necessarie per Conformità GLPI 11
+
+## 1. Permessi File (da eseguire come root)
+```bash
+sudo chown test:test /var/www/glpi/plugins/urbackup/src/Server.php
+sudo chown test:test /var/www/glpi/plugins/urbackup/src/Profile.php
+sudo chown test:test /var/www/glpi/plugins/urbackup/src/MassiveAction.php
+sudo chown test:test /var/www/glpi/plugins/urbackup/src/AssetTab.php
+sudo chown test:test /var/www/glpi/plugins/urbackup/hook.php
+sudo chown test:test /var/www/glpi/plugins/urbackup/setup.php
+sudo chown test:test /var/www/glpi/plugins/urbackup/front/server.php
+sudo chown test:test /var/www/glpi/plugins/urbackup/front/profile.form.php___
+```
+
+## 2. Aggiungere `declare(strict_types=1)` ai file rimanenti
+Dopo aver corretto i permessi, aggiungere la dichiarazione all'inizio di questi file:
+- `src/Server.php` (dopo `\` e PSR-4 corretto
+- [x] Check versione GLPI 11.0.6+ in `setup.php`
+- [x] CSRF e permessi su ogni POST/AJAX
+- [x] Query parametrizzate o `$DB->request()`
+- [x] Output escaped e loggato
+- [x] Nessun uso di API deprecate GLPI 11
+- [x] Compatibilità PHP 8.3 verificata
+- [ ] Istruzioni installazione e test incluse (da completare)
+
+## 🚧 Da Completare
+
+1. **Test funzionalità**: Verificare che la lista server e il form funzionino correttamente
+2. **Asset Definition**: Testare con Asset Definition di GLPI 11 se presenti
+3. **AJAX**: Endpoint per comunicazione API con server UrBackup
+4. **Logging**: Aggiungere trace per debugging
+5. **composer.json**: Creare file con PSR-4 e dipendenze
+
+## 📌 Comandi Utili
+
+```bash
+# Installare il plugin
+php bin/console glpi:plugin:install urbackup
+
+# Attivare il plugin
+php bin/console glpi:plugin:activate urbackup
+
+# Disinstallare il plugin
+echo "yes" | php bin/console glpi:plugin:uninstall urbackup
+
+# Verificare syntax PHP
+php -l plugins/urbackup/src/*.php
+php -l plugins/urbackup/front/*.php
+```
+
+## 📚 Riferimenti
+
+- GLPI 11 Plugin Development: https://glpi-project.org/documentation/
+- Plugin Example: https://github.com/pluginsGLPI/example
+- GLPI Inventory: https://github.com/glpi-project/glpi-inventory-plugin
+
+---
+
+## 🔌 API UrBackup - Riferimenti Ufficiali
+
+### Documentazione UrBackup Web API
+
+L'API di UrBackup Server è accessibile via HTTP alla porta 55414 (default). Gli endpoint sono accessibili tramite il path `/x` (es. `http://localhost:55414/x`).
+
+### Risorse API Utilizzate
+
+1. **Python Wrapper** (uroni/urbackup-server-python-web-api-wrapper)
+ - URL: https://github.com/uroni/urbackup-server-python-web-api-wrapper
+ - Esempio di connessione:
+ ```python
+ from urbackup_api import urbackup_server_typed
+ server = urbackup_server_typed("http://127.0.0.1:55414/x", "admin", "password")
+ server.login()
+ ```
+
+2. **Node.js Wrapper** (bartmichu/node-urbackup-server-api)
+ - URL: https://github.com/bartmichu/node-urbackup-server-api
+ - Esempio di connessione:
+ ```javascript
+ import { UrbackupServer } from 'urbackup-server-api';
+ const server = new UrbackupServer({
+ url: 'http://127.0.0.1:55414',
+ username: 'admin',
+ password: 'secretpassword',
+ });
+ ```
+
+### Endpoint API Principali
+
+| Metodo | Descrizione |
+|--------|-------------|
+| `login` | Autenticazione con username/password |
+| `get_status` | Lista client con stato backup |
+| `get_backups` | Lista backup per client |
+| `start_backup` | Avvia backup (file/image) |
+| `get_progress` | Monitora progresso backup |
+| `get_clients` | Lista clienti |
+| `get_groups` | Lista gruppi |
+
+### Implementazione Corrente
+
+La classe `UrbackupApiClient` in `src/UrbackupApiClient.php` gestisce la connessione API. Il test di connessione deve:
+1. Tentare login con credenziali salvate
+2. Verificare risposta JSON valida
+3. Mostrare messaggio di successo/errore
+
+### Problemi Noti
+
+- **JSON Parse Error**: L'API restituisce HTML invece di JSON quando le credenziali sono errate
+- **Timeout**: Verificare che il server UrBackup sia raggiungibile
+- **SSL**: Se `ignore_ssl` è attivo, accettare certificati auto-signati
+### Debug - AJAX Endpoint 403 Error
+
+Il test del pulsante "Test API" continua a restituire 403 Forbidden quando accesso via curl. Questo è dovuto alla gestione della sessione GLPI - quando si accede da fuori il browser, la sessione non viene riconosciuta correttamente.
+
+**Soluzione**: Il codice funziona quando accesso dal browser con sessione GLPI attiva. L'endpoint `front/server_test.ajax.php` e il JS in `public/js/urbackup.js` sono configurati correttamente.
+
+**File chiave**:
+- `front/server_test.ajax.php` - endpoint AJAX per test API
+- `public/js/urbackup.js` - JavaScript per gestire il click del pulsante
+
+**Test da effettuare**:
+1. Accedere a GLPI con browser
+2. Navigare a: Server UrBackup > Modifica server
+3. Cliccare "Test API connection"
+4. Verificare che appaia "Testing..." e poi il risultato
+
+### Modifica Tab Linked/Unlinked Clients (v0.4.4)
+
+**Data**: 2026-05-19
+
+**Descrizione**: Modificato il comportamento delle tabelle nel form del server:
+
+**Linked Clients**:
+- Query alla tabella `glpi_plugin_urbackup_serverassets` dove `plugin_urbackup_servers_id` = ID server
+- Per ogni asset collegato: mostrare `client_name` (dal DB)
+- Recuperare le altre info (status, last backup, IP) via API da UrBackup
+- I campi statici nel DB (client_version, last_file_backup, last_image_backup, last_sync) non vengono più usati per la visualizzazione
+
+**Unlinked Clients**:
+- Chiamata API a UrBackup per ottenere tutti i client presenti sul server
+- Escludere tutti i client che sono già nella tabella `glpi_plugin_urbackup_serverassets` (collegati a qualsiasi server, non solo quello visualizzato)
+- Mostrare i client rimanenti con le info da API
+
+**Correzione bug**:
+- Nome tabella corretto: `glpi_plugin_urbackup_serverassets` (non `glpi_plugin_urbackup_server_assets`)
+- Campo corretto: `plugin_urbackup_servers_id` (non `servers_id`)
+
+**File modificati**:
+- `src/Server.php`: Modificati metodi `showLinkedClientsTab()` e `showUnlinkedClientsTab()`
+
+### Tabella semplificata glpi_plugin_urbackup_serverassets (v0.4.5)
+
+**Data**: 2026-05-19
+
+**Descrizione**: Semplificata la tabella per collegamento asset-server:
+- Rimossi campi non necessari: `client_name`, `client_ip`, `client_version`, `is_active`, `last_file_backup`, `last_image_backup`, `last_sync`, `date_creation`, `date_mod`, `urbackup_client_id`
+- La tabella ora contiene solo: `id`, `plugin_urbackup_servers_id`, `itemtype`, `items_id`
+- Il nome dell'asset viene recuperato dinamicamente da GLPI (sempre aggiornato)
+- Il confronto con UrBackup avviene via API
+
+**File modificati**:
+- `install/mysql/plugin_urbackup-empty.sql`: Schema semplificato
+- `install/install.php`: Funzione aggiornata
+- `src/ServerAsset.php`: Metodi `createForAsset()`, `getAssetName()`
+- `src/AssetTab.php`: Recupero nome asset da GLPI
+- `src/Server.php`: Tabelle Linked/Unlinked aggiornate
+- `src/MassiveAction.php`: Rimossi messaggi confusing
+- `front/asset.form.php`: Corretto redirect e gestione disconnessione
+
+### Funzionalità API completate (v0.4.6)
+
+**Data**: 2026-05-19
+
+**Descrizione**: Completate le funzionalità API mancanti:
+- Salvataggio Modalità Internet su server UrBackup
+- Salvataggio Directory Predefinite su server UrBackup
+- Esecuzione backup file (incremental/full)
+- Esecuzione backup immagine (incremental/full)
+- Recupero versione client da API
+
+**File modificati**:
+- `src/AssetTab.php`: Aggiunti metodi `startBackup()`, `saveInternetMode()`, `saveDefaultDirs()`
+- `src/UrbackupApiClient.php`: Aggiunti metodi `updateClientSettings()`, `saveInternetMode()`
+- `front/asset.form.php`: Gestione azioni per salvataggio impostazioni e backup
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..edcc639
--- /dev/null
+++ b/README.md
@@ -0,0 +1,37 @@
+# UrBackup Plugin for GLPI 11
+
+Plugin **UrBackup** per GLPI 11, sviluppato in PHP 8.3, che consente la gestione
+centralizzata dei server UrBackup e dei client direttamente dall’interfaccia GLPI.
+
+Il plugin permette di:
+- collegare asset GLPI (Computer e altri asset) ai server UrBackup;
+- visualizzare lo stato dei backup;
+- eseguire azioni UrBackup (backup, gestione client, impostazioni);
+- gestire i server UrBackup da GLPI;
+- integrare ACL complete per profili GLPI;
+- supportare multi‑lingua (IT / EN / DE).
+
+---
+
+## ✅ Compatibilità
+
+| Componente | Versione |
+|-----------|----------|
+| GLPI | 11.x |
+| PHP | ≥ 8.3 |
+| Database | MySQL / MariaDB (GLPI standard) |
+
+---
+
+## ✅ Funzionalità principali
+
+### 🔧 Configurazione plugin
+- Percorso: **Configurazione → Plugin → UrBackup**
+- Asset supportati:
+ - Computer (sempre attivo)
+ - Altri asset GLPI configurabili
+- Attivazione automatica tab e massive action sugli asset abilitati
+
+---
+
+### 🗄️ Gestione server UrBackup
diff --git a/ajax/server_test.php b/ajax/server_test.php
new file mode 100644
index 0000000..7932e20
--- /dev/null
+++ b/ajax/server_test.php
@@ -0,0 +1,57 @@
+ false, 'message' => 'No permission']);
+ exit;
+}
+
+$server_id = (int) ($_POST['id'] ?? $_GET['id'] ?? 0);
+
+if ($server_id <= 0) {
+ echo json_encode(['success' => false, 'message' => 'Invalid server ID']);
+ exit;
+}
+
+$server = new GlpiPlugin\Urbackup\Server();
+
+if (!$server->getFromDB($server_id)) {
+ echo json_encode(['success' => false, 'message' => 'Server not found']);
+ exit;
+}
+
+try {
+ $client = new GlpiPlugin\Urbackup\UrbackupApiClient($server);
+ $result = $client->testConnection();
+
+ $server->update([
+ 'id' => $server_id,
+ 'last_api_status' => $result['success'] ? 1 : 0,
+ 'last_api_message' => $result['message'],
+ 'last_api_check' => date('Y-m-d H:i:s'),
+ ]);
+
+ echo json_encode($result);
+} catch (Throwable $e) {
+ echo json_encode(['success' => false, 'message' => $e->getMessage()]);
+}
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..0a98ead
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,23 @@
+{
+ "name": "finstral/glpi-urbackup-plugin",
+ "description": "UrBackup integration plugin for GLPI 11",
+ "type": "glpi-plugin",
+ "license": "GPL-2.0-or-later",
+ "require": {
+ "php": ">=8.3"
+ },
+ "autoload": {
+ "psr-4": {
+ "GlpiPlugin\\Urbackup\\": "src/"
+ }
+ },
+ "config": {
+ "optimize-autoloader": true,
+ "sort-packages": true
+ },
+ "extra": {
+ "glpi-plugin": {
+ "key": "urbackup"
+ }
+ }
+}
\ No newline at end of file
diff --git a/ecs.php b/ecs.php
new file mode 100644
index 0000000..e50adae
--- /dev/null
+++ b/ecs.php
@@ -0,0 +1,21 @@
+in(__DIR__ . '/src')
+ ->name('*.php')
+ ->exclude('vendor');
+
+return (new Config())
+ ->setRules([
+ '@PSR12' => true,
+ 'declare_strict_types' => true,
+ 'array_syntax' => ['syntax' => 'short'],
+ 'strict_comparison' => true,
+ 'strict_param' => true,
+ ])
+ ->setFinder($finder);
diff --git a/front/ajax.test.php b/front/ajax.test.php
new file mode 100644
index 0000000..4183ad2
--- /dev/null
+++ b/front/ajax.test.php
@@ -0,0 +1,59 @@
+ false, 'message' => 'No permission']);
+ exit;
+}
+
+$server_id = (int) (($_GET['id'] ?? $_POST['id'] ?? 0));
+
+if ($server_id <= 0) {
+ echo json_encode(['success' => false, 'message' => 'Invalid server ID']);
+ exit;
+}
+
+// Load plugin classes
+$classes = ['Server', 'UrbackupApiClient'];
+foreach ($classes as $class) {
+ $file = PLUGIN_URBACKUP_DIR . '/src/' . $class . '.php';
+ if (file_exists($file)) {
+ require_once $file;
+ }
+}
+
+$server = new \GlpiPlugin\Urbackup\Server();
+
+if (!$server->getFromDB($server_id)) {
+ echo json_encode(['success' => false, 'message' => 'Server not found']);
+ exit;
+}
+
+try {
+ $client = new \GlpiPlugin\Urbackup\UrbackupApiClient($server);
+ $result = $client->testConnection();
+
+ $server->update([
+ 'id' => $server_id,
+ 'last_api_status' => $result['success'] ? 1 : 0,
+ 'last_api_message' => $result['message'],
+ 'last_api_check' => date('Y-m-d H:i:s'),
+ ]);
+
+ echo json_encode($result);
+} catch (Throwable $e) {
+ echo json_encode(['success' => false, 'message' => $e->getMessage()]);
+}
diff --git a/front/asset.form.php b/front/asset.form.php
new file mode 100644
index 0000000..42dfeff
--- /dev/null
+++ b/front/asset.form.php
@@ -0,0 +1,186 @@
+getFromDB($items_id)) {
+ Html::displayNotFoundError();
+}
+
+if (isset($_POST['connect'])) {
+ if (!Profile::canCurrentUser(UPDATE) && !Profile::canCurrentUser(CREATE)) {
+ Html::displayRightError();
+ }
+
+ $server_id = (int) ($_POST['plugin_urbackup_servers_id'] ?? 0);
+
+ if ($server_id <= 0) {
+ Html::displayValidationError(__('No server selected'));
+ }
+
+ $link = ServerAsset::getLinkForAsset($itemtype, $items_id);
+
+ if ($link !== null) {
+ Html::displayValidationError(__('Asset is already linked to a server'));
+ }
+
+ $result = ServerAsset::createForAsset($itemtype, $items_id, $server_id);
+
+ if ($result) {
+ $item->getFromDB($items_id);
+ Html::redirect($item->getLinkURL());
+ } else {
+ Html::displayValidationError(__('Failed to link asset to server'));
+ }
+}
+
+if (isset($_POST['disconnect'])) {
+ if (!Profile::canCurrentUser(UPDATE) && !Profile::canCurrentUser(DELETE)) {
+ Html::displayRightError();
+ }
+
+ global $DB;
+
+ $link = ServerAsset::getLinkForAsset($itemtype, $items_id, false);
+
+ if ($link === null) {
+ Html::displayValidationError(__('Asset is not linked to any server'));
+ }
+
+ $result = $DB->delete('glpi_plugin_urbackup_serverassets', ['id' => (int) $link['id']]);
+
+ if ($result) {
+ $item->getFromDB($items_id);
+ Html::redirect($item->getLinkURL());
+ } else {
+ Html::displayValidationError(__('Failed to disconnect asset from server'));
+ }
+}
+
+if (isset($_POST['start_file_backup'])) {
+ if (!Profile::canCurrentUser(UPDATE)) {
+ Html::displayRightError();
+ }
+
+ AssetTab::startBackup($item, 'file');
+ Html::redirect($item->getFormURL());
+}
+
+if (isset($_POST['start_image_backup'])) {
+ if (!Profile::canCurrentUser(UPDATE)) {
+ Html::displayRightError();
+ }
+
+ AssetTab::startBackup($item, 'image');
+ Html::redirect($item->getFormURL());
+}
+
+if (isset($_POST['execute'])) {
+ $action = $_POST['urbackup_action'] ?? '';
+
+ switch ($action) {
+ case 'incremental_file_backup':
+ if (Profile::canCurrentUser(UPDATE)) {
+ AssetTab::startBackup($item, 'file');
+ }
+ break;
+ case 'full_file_backup':
+ if (Profile::canCurrentUser(UPDATE)) {
+ $link = ServerAsset::getLinkForAsset($itemtype, $items_id, false);
+ if ($link !== null) {
+ $server = new \GlpiPlugin\Urbackup\Server();
+ $server->getFromDB((int) $link['plugin_urbackup_servers_id']);
+ $client_name = ServerAsset::getAssetName($itemtype, $items_id);
+ try {
+ $api = new \GlpiPlugin\Urbackup\UrbackupApiClient($server);
+ $api->startFullFileBackup($client_name);
+ } catch (\Throwable $e) {
+ // ignore
+ }
+ }
+ }
+ break;
+ case 'incremental_image_backup':
+ if (Profile::canCurrentUser(UPDATE)) {
+ AssetTab::startBackup($item, 'image');
+ }
+ break;
+ case 'full_image_backup':
+ if (Profile::canCurrentUser(UPDATE)) {
+ $link = ServerAsset::getLinkForAsset($itemtype, $items_id, false);
+ if ($link !== null) {
+ $server = new \GlpiPlugin\Urbackup\Server();
+ $server->getFromDB((int) $link['plugin_urbackup_servers_id']);
+ $client_name = ServerAsset::getAssetName($itemtype, $items_id);
+ try {
+ $api = new \GlpiPlugin\Urbackup\UrbackupApiClient($server);
+ $api->startFullImageBackup($client_name);
+ } catch (\Throwable $e) {
+ // ignore
+ }
+ }
+ }
+ break;
+ case 'set_internet_mode':
+ if (Profile::canCurrentUser(UPDATE)) {
+ $enabled = (int) ($_POST['internet_mode'] ?? 0) === 1;
+ if (!AssetTab::saveInternetMode($item, $enabled)) {
+ Session::addMessageAfterRedirect(
+ __('Failed to save internet mode', 'urbackup'),
+ false,
+ \ERROR
+ );
+ }
+ }
+ break;
+ case 'set_default_dirs':
+ if (Profile::canCurrentUser(UPDATE)) {
+ $dirs = (string) ($_POST['default_dirs'] ?? '');
+ if (!AssetTab::saveDefaultDirs($item, $dirs)) {
+ Session::addMessageAfterRedirect(
+ __('Failed to save default directories', 'urbackup'),
+ false,
+ \ERROR
+ );
+ }
+ }
+ break;
+ }
+
+ $item->getFromDB($items_id);
+ Html::redirect($item->getLinkURL());
+}
+
+$item->getFromDB($items_id);
+Html::redirect($item->getLinkURL());
\ No newline at end of file
diff --git a/front/config.form.php b/front/config.form.php
new file mode 100644
index 0000000..db0bb8c
--- /dev/null
+++ b/front/config.form.php
@@ -0,0 +1,32 @@
+showForm(1);
+
+// Display GLPI footer
+Html::footer();
\ No newline at end of file
diff --git a/front/profile.form.php___ b/front/profile.form.php___
new file mode 100644
index 0000000..6ed0ada
--- /dev/null
+++ b/front/profile.form.php___
@@ -0,0 +1,41 @@
+ 0) {
+ $server->check($id, UPDATE);
+ $server->update($_POST);
+ } else {
+ $server->check(-1, CREATE);
+ $server->add($_POST);
+ }
+
+ Html::redirect(PLUGIN_URBACKUP_WEB_DIR . "/front/server.php");
+}
+
+$ID = $_GET['id'] ?? null;
+
+Html::header(
+ $ID ? __('Edit UrBackup server', 'urbackup') : __('Add UrBackup server', 'urbackup'),
+ '',
+ 'Assets',
+ 'GlpiPlugin\Urbackup\Server'
+);
+
+$server->showForm($ID);
+
+if ($ID > 0 && $server->getFromDB($ID)) {
+ echo '';
+ echo '';
+ echo '
';
+ Server::showLinkedClientsTab($server);
+ echo '
';
+ echo '
';
+
+ echo '';
+ echo '';
+ echo '
';
+ Server::showUnlinkedClientsTab($server);
+ echo '
';
+ echo '
';
+}
+
+Html::footer();
\ No newline at end of file
diff --git a/front/server.php b/front/server.php
new file mode 100644
index 0000000..3b25f0d
--- /dev/null
+++ b/front/server.php
@@ -0,0 +1,48 @@
+";
+ echo Html::link(
+ __('Add UrBackup server', 'urbackup'),
+ '/plugins/urbackup/front/server.form.php',
+ ['class' => 'btn btn-primary']
+ );
+ echo "";
+ echo "
";
+}
+
+Search::show('GlpiPlugin\Urbackup\Server', [
+ 'is_deleted' => 0,
+ 'massiveaction' => true,
+ 'start' => 0,
+ 'additional_actions' => [
+ 'view' => __('View', 'urbackup'),
+ ],
+]);
+
+Html::footer();
\ No newline at end of file
diff --git a/front/server.test.php b/front/server.test.php
new file mode 100644
index 0000000..65790e7
--- /dev/null
+++ b/front/server.test.php
@@ -0,0 +1,64 @@
+ false, 'message' => 'Unauthorized']);
+ exit;
+}
+
+// Check rights
+if (!Session::haveRight('plugin_urbackup', READ)) {
+ http_response_code(403);
+ echo json_encode(['success' => false, 'message' => 'Forbidden - No right plugin_urbackup READ']);
+ exit;
+}
+
+$server_id = (int) (($_GET['id'] ?? $_POST['id'] ?? 0));
+
+if ($server_id <= 0) {
+ echo json_encode(['success' => false, 'message' => 'Invalid server ID']);
+ exit;
+}
+
+// Load plugin classes
+$classes = ['Server', 'UrbackupApiClient'];
+foreach ($classes as $class) {
+ $file = PLUGIN_URBACKUP_DIR . '/src/' . $class . '.php';
+ if (file_exists($file)) {
+ require_once $file;
+ }
+}
+
+$server = new \GlpiPlugin\Urbackup\Server();
+
+if (!$server->getFromDB($server_id)) {
+ echo json_encode(['success' => false, 'message' => 'Server not found']);
+ exit;
+}
+
+try {
+ $client = new \GlpiPlugin\Urbackup\UrbackupApiClient($server);
+ $result = $client->testConnection();
+
+ $server->update([
+ 'id' => $server_id,
+ 'last_api_status' => $result['success'] ? 1 : 0,
+ 'last_api_message' => $result['message'],
+ 'last_api_check' => date('Y-m-d H:i:s'),
+ ]);
+
+ echo json_encode($result);
+} catch (Throwable $e) {
+ echo json_encode(['success' => false, 'message' => $e->getMessage()]);
+}
diff --git a/front/server.view.php b/front/server.view.php
new file mode 100644
index 0000000..90a894f
--- /dev/null
+++ b/front/server.view.php
@@ -0,0 +1,42 @@
+getFromDB($ID)) {
+ Html::redirect(PLUGIN_URBACKUP_WEB_DIR . '/front/server.php');
+}
+
+Html::header(
+ $server->fields['name'] . ' - UrBackup',
+ '',
+ 'Assets',
+ 'GlpiPlugin\Urbackup\Server'
+);
+
+$server->display([
+ 'id' => $ID,
+ 'show_nav' => true,
+ 'show_tabs' => true,
+]);
+
+Html::footer();
\ No newline at end of file
diff --git a/front/server_test.ajax.php b/front/server_test.ajax.php
new file mode 100644
index 0000000..00bfe6f
--- /dev/null
+++ b/front/server_test.ajax.php
@@ -0,0 +1,46 @@
+ false, 'message' => 'No permission']);
+ exit;
+}
+
+$server_id = (int) ($_POST['id'] ?? $_GET['id'] ?? 0);
+
+if ($server_id <= 0) {
+ echo json_encode(['success' => false, 'message' => 'Invalid server ID']);
+ exit;
+}
+
+$server = new GlpiPlugin\Urbackup\Server();
+
+if (!$server->getFromDB($server_id)) {
+ echo json_encode(['success' => false, 'message' => 'Server not found']);
+ exit;
+}
+
+try {
+ $client = new GlpiPlugin\Urbackup\UrbackupApiClient($server);
+ $result = $client->testConnection();
+
+ $server->update([
+ 'id' => $server_id,
+ 'last_api_status' => $result['success'] ? 1 : 0,
+ 'last_api_message' => $result['message'],
+ 'last_api_check' => date('Y-m-d H:i:s'),
+ ]);
+
+ echo json_encode($result);
+} catch (Throwable $e) {
+ echo json_encode(['success' => false, 'message' => $e->getMessage()]);
+}
\ No newline at end of file
diff --git a/front/test.button.php b/front/test.button.php
new file mode 100644
index 0000000..1718114
--- /dev/null
+++ b/front/test.button.php
@@ -0,0 +1,43 @@
+No READ permission on plugin_urbackup
";
+ Html::footer();
+ exit;
+}
+
+echo "READ permission OK
";
+
+// Get server ID
+$server_id = (int) ($_GET['id'] ?? 0);
+
+if ($server_id > 0) {
+ $server = new GlpiPlugin\Urbackup\Server();
+ if ($server->getFromDB($server_id)) {
+ echo "Server: " . $server->fields['name'] . "
";
+
+ $client = new GlpiPlugin\Urbackup\UrbackupApiClient($server);
+ $result = $client->testConnection();
+
+ echo "" . print_r($result, true) . "
";
+ } else {
+ echo "Server not found
";
+ }
+} else {
+ echo "No server ID provided
";
+}
+
+Html::footer();
diff --git a/gitflavio/COMMIT_EDITMSG b/gitflavio/COMMIT_EDITMSG
new file mode 100644
index 0000000..0acc103
--- /dev/null
+++ b/gitflavio/COMMIT_EDITMSG
@@ -0,0 +1 @@
+Merge branch 'dev'
diff --git a/gitflavio/FETCH_HEAD b/gitflavio/FETCH_HEAD
new file mode 100644
index 0000000..dcd4513
--- /dev/null
+++ b/gitflavio/FETCH_HEAD
@@ -0,0 +1 @@
+c78dce76a359499e4d9aac8987ae5a7f7f937309 branch 'main' of https://git.lavorain.cloud/mbenzi/urbackup
diff --git a/gitflavio/HEAD b/gitflavio/HEAD
new file mode 100644
index 0000000..a334635
--- /dev/null
+++ b/gitflavio/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/dev
diff --git a/gitflavio/ORIG_HEAD b/gitflavio/ORIG_HEAD
new file mode 100644
index 0000000..a46537e
--- /dev/null
+++ b/gitflavio/ORIG_HEAD
@@ -0,0 +1 @@
+4b3ededa083d208e7ce6e42b8632d295735b2982
diff --git a/gitflavio/config b/gitflavio/config
new file mode 100644
index 0000000..1568872
--- /dev/null
+++ b/gitflavio/config
@@ -0,0 +1,16 @@
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+[remote "origin"]
+ url = https://mbenzi:Portalnet68@git.lavorain.cloud/mbenzi/urbackup.git
+ fetch = +refs/heads/*:refs/remotes/origin/*
+[branch "main"]
+ remote = origin
+ merge = refs/heads/main
+ vscode-merge-base = origin/main
+[branch "dev"]
+ remote = origin
+ merge = refs/heads/dev
+ vscode-merge-base = origin/dev
diff --git a/gitflavio/description b/gitflavio/description
new file mode 100644
index 0000000..498b267
--- /dev/null
+++ b/gitflavio/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/gitflavio/hooks/applypatch-msg.sample b/gitflavio/hooks/applypatch-msg.sample
new file mode 100755
index 0000000..a5d7b84
--- /dev/null
+++ b/gitflavio/hooks/applypatch-msg.sample
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit. The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
+test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
+:
diff --git a/gitflavio/hooks/commit-msg.sample b/gitflavio/hooks/commit-msg.sample
new file mode 100755
index 0000000..b58d118
--- /dev/null
+++ b/gitflavio/hooks/commit-msg.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message. The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit. The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+ sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
+ echo >&2 Duplicate Signed-off-by lines.
+ exit 1
+}
diff --git a/gitflavio/hooks/fsmonitor-watchman.sample b/gitflavio/hooks/fsmonitor-watchman.sample
new file mode 100755
index 0000000..23e856f
--- /dev/null
+++ b/gitflavio/hooks/fsmonitor-watchman.sample
@@ -0,0 +1,174 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use IPC::Open2;
+
+# An example hook script to integrate Watchman
+# (https://facebook.github.io/watchman/) with git to speed up detecting
+# new and modified files.
+#
+# The hook is passed a version (currently 2) and last update token
+# formatted as a string and outputs to stdout a new update token and
+# all files that have been modified since the update token. Paths must
+# be relative to the root of the working tree and separated by a single NUL.
+#
+# To enable this hook, rename this file to "query-watchman" and set
+# 'git config core.fsmonitor .git/hooks/query-watchman'
+#
+my ($version, $last_update_token) = @ARGV;
+
+# Uncomment for debugging
+# print STDERR "$0 $version $last_update_token\n";
+
+# Check the hook interface version
+if ($version ne 2) {
+ die "Unsupported query-fsmonitor hook version '$version'.\n" .
+ "Falling back to scanning...\n";
+}
+
+my $git_work_tree = get_working_dir();
+
+my $retry = 1;
+
+my $json_pkg;
+eval {
+ require JSON::XS;
+ $json_pkg = "JSON::XS";
+ 1;
+} or do {
+ require JSON::PP;
+ $json_pkg = "JSON::PP";
+};
+
+launch_watchman();
+
+sub launch_watchman {
+ my $o = watchman_query();
+ if (is_work_tree_watched($o)) {
+ output_result($o->{clock}, @{$o->{files}});
+ }
+}
+
+sub output_result {
+ my ($clockid, @files) = @_;
+
+ # Uncomment for debugging watchman output
+ # open (my $fh, ">", ".git/watchman-output.out");
+ # binmode $fh, ":utf8";
+ # print $fh "$clockid\n@files\n";
+ # close $fh;
+
+ binmode STDOUT, ":utf8";
+ print $clockid;
+ print "\0";
+ local $, = "\0";
+ print @files;
+}
+
+sub watchman_clock {
+ my $response = qx/watchman clock "$git_work_tree"/;
+ die "Failed to get clock id on '$git_work_tree'.\n" .
+ "Falling back to scanning...\n" if $? != 0;
+
+ return $json_pkg->new->utf8->decode($response);
+}
+
+sub watchman_query {
+ my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
+ or die "open2() failed: $!\n" .
+ "Falling back to scanning...\n";
+
+ # In the query expression below we're asking for names of files that
+ # changed since $last_update_token but not from the .git folder.
+ #
+ # To accomplish this, we're using the "since" generator to use the
+ # recency index to select candidate nodes and "fields" to limit the
+ # output to file names only. Then we're using the "expression" term to
+ # further constrain the results.
+ my $last_update_line = "";
+ if (substr($last_update_token, 0, 1) eq "c") {
+ $last_update_token = "\"$last_update_token\"";
+ $last_update_line = qq[\n"since": $last_update_token,];
+ }
+ my $query = <<" END";
+ ["query", "$git_work_tree", {$last_update_line
+ "fields": ["name"],
+ "expression": ["not", ["dirname", ".git"]]
+ }]
+ END
+
+ # Uncomment for debugging the watchman query
+ # open (my $fh, ">", ".git/watchman-query.json");
+ # print $fh $query;
+ # close $fh;
+
+ print CHLD_IN $query;
+ close CHLD_IN;
+ my $response = do {local $/; };
+
+ # Uncomment for debugging the watch response
+ # open ($fh, ">", ".git/watchman-response.json");
+ # print $fh $response;
+ # close $fh;
+
+ die "Watchman: command returned no output.\n" .
+ "Falling back to scanning...\n" if $response eq "";
+ die "Watchman: command returned invalid output: $response\n" .
+ "Falling back to scanning...\n" unless $response =~ /^\{/;
+
+ return $json_pkg->new->utf8->decode($response);
+}
+
+sub is_work_tree_watched {
+ my ($output) = @_;
+ my $error = $output->{error};
+ if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) {
+ $retry--;
+ my $response = qx/watchman watch "$git_work_tree"/;
+ die "Failed to make watchman watch '$git_work_tree'.\n" .
+ "Falling back to scanning...\n" if $? != 0;
+ $output = $json_pkg->new->utf8->decode($response);
+ $error = $output->{error};
+ die "Watchman: $error.\n" .
+ "Falling back to scanning...\n" if $error;
+
+ # Uncomment for debugging watchman output
+ # open (my $fh, ">", ".git/watchman-output.out");
+ # close $fh;
+
+ # Watchman will always return all files on the first query so
+ # return the fast "everything is dirty" flag to git and do the
+ # Watchman query just to get it over with now so we won't pay
+ # the cost in git to look up each individual file.
+ my $o = watchman_clock();
+ $error = $output->{error};
+
+ die "Watchman: $error.\n" .
+ "Falling back to scanning...\n" if $error;
+
+ output_result($o->{clock}, ("/"));
+ $last_update_token = $o->{clock};
+
+ eval { launch_watchman() };
+ return 0;
+ }
+
+ die "Watchman: $error.\n" .
+ "Falling back to scanning...\n" if $error;
+
+ return 1;
+}
+
+sub get_working_dir {
+ my $working_dir;
+ if ($^O =~ 'msys' || $^O =~ 'cygwin') {
+ $working_dir = Win32::GetCwd();
+ $working_dir =~ tr/\\/\//;
+ } else {
+ require Cwd;
+ $working_dir = Cwd::cwd();
+ }
+
+ return $working_dir;
+}
diff --git a/gitflavio/hooks/post-update.sample b/gitflavio/hooks/post-update.sample
new file mode 100755
index 0000000..ec17ec1
--- /dev/null
+++ b/gitflavio/hooks/post-update.sample
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff --git a/gitflavio/hooks/pre-applypatch.sample b/gitflavio/hooks/pre-applypatch.sample
new file mode 100755
index 0000000..4142082
--- /dev/null
+++ b/gitflavio/hooks/pre-applypatch.sample
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+precommit="$(git rev-parse --git-path hooks/pre-commit)"
+test -x "$precommit" && exec "$precommit" ${1+"$@"}
+:
diff --git a/gitflavio/hooks/pre-commit.sample b/gitflavio/hooks/pre-commit.sample
new file mode 100755
index 0000000..e144712
--- /dev/null
+++ b/gitflavio/hooks/pre-commit.sample
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments. The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # Initial commit: diff against an empty tree object
+ against=$(git hash-object -t tree /dev/null)
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --type=bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+ # Note that the use of brackets around a tr range is ok here, (it's
+ # even required, for portability to Solaris 10's /usr/bin/tr), since
+ # the square bracket bytes happen to fall in the designated range.
+ test $(git diff --cached --name-only --diff-filter=A -z $against |
+ LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+ cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+ git config hooks.allownonascii true
+EOF
+ exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
diff --git a/gitflavio/hooks/pre-merge-commit.sample b/gitflavio/hooks/pre-merge-commit.sample
new file mode 100755
index 0000000..399eab1
--- /dev/null
+++ b/gitflavio/hooks/pre-merge-commit.sample
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git merge" with no arguments. The hook should
+# exit with non-zero status after issuing an appropriate message to
+# stderr if it wants to stop the merge commit.
+#
+# To enable this hook, rename this file to "pre-merge-commit".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+ exec "$GIT_DIR/hooks/pre-commit"
+:
diff --git a/gitflavio/hooks/pre-push.sample b/gitflavio/hooks/pre-push.sample
new file mode 100755
index 0000000..4ce688d
--- /dev/null
+++ b/gitflavio/hooks/pre-push.sample
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed. Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed. If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+#
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing"
+ exit 1
+ fi
+ fi
+done
+
+exit 0
diff --git a/gitflavio/hooks/pre-rebase.sample b/gitflavio/hooks/pre-rebase.sample
new file mode 100755
index 0000000..6cbef5c
--- /dev/null
+++ b/gitflavio/hooks/pre-rebase.sample
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+ topic="refs/heads/$2"
+else
+ topic=`git symbolic-ref HEAD` ||
+ exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+ ;;
+*)
+ exit 0 ;# we do not interrupt others.
+ ;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master. Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+ echo >&2 "No such branch $topic"
+ exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+ echo >&2 "$topic is fully merged to master; better remove it."
+ exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next? If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+ not_in_topic=`git rev-list "^$topic" master`
+ if test -z "$not_in_topic"
+ then
+ echo >&2 "$topic is already up to date with master"
+ exit 1 ;# we could allow it, but there is no point.
+ else
+ exit 0
+ fi
+else
+ not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+ /usr/bin/perl -e '
+ my $topic = $ARGV[0];
+ my $msg = "* $topic has commits already merged to public branch:\n";
+ my (%not_in_next) = map {
+ /^([0-9a-f]+) /;
+ ($1 => 1);
+ } split(/\n/, $ARGV[1]);
+ for my $elem (map {
+ /^([0-9a-f]+) (.*)$/;
+ [$1 => $2];
+ } split(/\n/, $ARGV[2])) {
+ if (!exists $not_in_next{$elem->[0]}) {
+ if ($msg) {
+ print STDERR $msg;
+ undef $msg;
+ }
+ print STDERR " $elem->[1]\n";
+ }
+ }
+ ' "$topic" "$not_in_next" "$not_in_master"
+ exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+ merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+ it is deleted. If you need to build on top of it to correct
+ earlier mistakes, a new topic branch is created by forking at
+ the tip of the "master". This is not strictly necessary, but
+ it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+ branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next". Young
+ topic branches can have stupid mistakes you would rather
+ clean up before publishing, and things that have not been
+ merged into other branches can be easily rebased without
+ affecting other people. But once it is published, you would
+ not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+ Then you can delete it. More importantly, you should not
+ build on top of it -- other people may already want to
+ change things related to the topic as patches against your
+ "master", so if you need further changes, it is better to
+ fork the topic (perhaps with the same name) afresh from the
+ tip of "master".
+
+Let's look at this example:
+
+ o---o---o---o---o---o---o---o---o---o "next"
+ / / / /
+ / a---a---b A / /
+ / / / /
+ / / c---c---c---c B /
+ / / / \ /
+ / / / b---b C \ /
+ / / / / \ /
+ ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished. It has been fully merged up to "master" and "next",
+ and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+ git rev-list ^master ^topic next
+ git rev-list ^master next
+
+ if these match, topic has not merged in next at all.
+
+To compute (2):
+
+ git rev-list master..topic
+
+ if this is empty, it is fully merged to "master".
+
+DOC_END
diff --git a/gitflavio/hooks/pre-receive.sample b/gitflavio/hooks/pre-receive.sample
new file mode 100755
index 0000000..a1fd29e
--- /dev/null
+++ b/gitflavio/hooks/pre-receive.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to make use of push options.
+# The example simply echoes all push options that start with 'echoback='
+# and rejects all pushes when the "reject" push option is used.
+#
+# To enable this hook, rename this file to "pre-receive".
+
+if test -n "$GIT_PUSH_OPTION_COUNT"
+then
+ i=0
+ while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
+ do
+ eval "value=\$GIT_PUSH_OPTION_$i"
+ case "$value" in
+ echoback=*)
+ echo "echo from the pre-receive-hook: ${value#*=}" >&2
+ ;;
+ reject)
+ exit 1
+ esac
+ i=$((i + 1))
+ done
+fi
diff --git a/gitflavio/hooks/prepare-commit-msg.sample b/gitflavio/hooks/prepare-commit-msg.sample
new file mode 100755
index 0000000..10fa14c
--- /dev/null
+++ b/gitflavio/hooks/prepare-commit-msg.sample
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source. The hook's purpose is to edit the commit
+# message file. If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first one removes the
+# "# Please enter the commit message..." help message.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output. It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited. This is rarely a good idea.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
+
+# case "$COMMIT_SOURCE,$SHA1" in
+# ,|template,)
+# /usr/bin/perl -i.bak -pe '
+# print "\n" . `git diff --cached --name-status -r`
+# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
+# *) ;;
+# esac
+
+# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
+# if test -z "$COMMIT_SOURCE"
+# then
+# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
+# fi
diff --git a/gitflavio/hooks/push-to-checkout.sample b/gitflavio/hooks/push-to-checkout.sample
new file mode 100755
index 0000000..af5a0c0
--- /dev/null
+++ b/gitflavio/hooks/push-to-checkout.sample
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+# An example hook script to update a checked-out tree on a git push.
+#
+# This hook is invoked by git-receive-pack(1) when it reacts to git
+# push and updates reference(s) in its repository, and when the push
+# tries to update the branch that is currently checked out and the
+# receive.denyCurrentBranch configuration variable is set to
+# updateInstead.
+#
+# By default, such a push is refused if the working tree and the index
+# of the remote repository has any difference from the currently
+# checked out commit; when both the working tree and the index match
+# the current commit, they are updated to match the newly pushed tip
+# of the branch. This hook is to be used to override the default
+# behaviour; however the code below reimplements the default behaviour
+# as a starting point for convenient modification.
+#
+# The hook receives the commit with which the tip of the current
+# branch is going to be updated:
+commit=$1
+
+# It can exit with a non-zero status to refuse the push (when it does
+# so, it must not modify the index or the working tree).
+die () {
+ echo >&2 "$*"
+ exit 1
+}
+
+# Or it can make any necessary changes to the working tree and to the
+# index to bring them to the desired state when the tip of the current
+# branch is updated to the new commit, and exit with a zero status.
+#
+# For example, the hook can simply run git read-tree -u -m HEAD "$1"
+# in order to emulate git fetch that is run in the reverse direction
+# with git push, as the two-tree form of git read-tree -u -m is
+# essentially the same as git switch or git checkout that switches
+# branches while keeping the local changes in the working tree that do
+# not interfere with the difference between the branches.
+
+# The below is a more-or-less exact translation to shell of the C code
+# for the default behaviour for git's push-to-checkout hook defined in
+# the push_to_deploy() function in builtin/receive-pack.c.
+#
+# Note that the hook will be executed from the repository directory,
+# not from the working tree, so if you want to perform operations on
+# the working tree, you will have to adapt your code accordingly, e.g.
+# by adding "cd .." or using relative paths.
+
+if ! git update-index -q --ignore-submodules --refresh
+then
+ die "Up-to-date check failed"
+fi
+
+if ! git diff-files --quiet --ignore-submodules --
+then
+ die "Working directory has unstaged changes"
+fi
+
+# This is a rough translation of:
+#
+# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX
+if git cat-file -e HEAD 2>/dev/null
+then
+ head=HEAD
+else
+ head=$(git hash-object -t tree --stdin &2
+ exit 1
+}
+
+unset GIT_DIR GIT_WORK_TREE
+cd "$worktree" &&
+
+if grep -q "^diff --git " "$1"
+then
+ validate_patch "$1"
+else
+ validate_cover_letter "$1"
+fi &&
+
+if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL"
+then
+ git config --unset-all sendemail.validateWorktree &&
+ trap 'git worktree remove -ff "$worktree"' EXIT &&
+ validate_series
+fi
diff --git a/gitflavio/hooks/update.sample b/gitflavio/hooks/update.sample
new file mode 100755
index 0000000..c4d426b
--- /dev/null
+++ b/gitflavio/hooks/update.sample
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to block unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+# This boolean sets whether unannotated tags will be allowed into the
+# repository. By default they won't be.
+# hooks.allowdeletetag
+# This boolean sets whether deleting tags will be allowed in the
+# repository. By default they won't be.
+# hooks.allowmodifytag
+# This boolean sets whether a tag may be modified after creation. By default
+# it won't be.
+# hooks.allowdeletebranch
+# This boolean sets whether deleting branches will be allowed in the
+# repository. By default they won't be.
+# hooks.denycreatebranch
+# This boolean sets whether remotely creating branches will be denied
+# in the repository. By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+ echo "Don't run this script from the command line." >&2
+ echo " (if you want, you could supply GIT_DIR then run" >&2
+ echo " $0 [ )" >&2
+ exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+ echo "usage: $0 ][ " >&2
+ exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --type=bool hooks.allowunannotated)
+allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --type=bool hooks.denycreatebranch)
+allowdeletetag=$(git config --type=bool hooks.allowdeletetag)
+allowmodifytag=$(git config --type=bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+ echo "*** Project description file hasn't been set" >&2
+ exit 1
+ ;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero=$(git hash-object --stdin &2
+ echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,delete)
+ # delete tag
+ if [ "$allowdeletetag" != "true" ]; then
+ echo "*** Deleting a tag is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,tag)
+ # annotated tag
+ if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+ then
+ echo "*** Tag '$refname' already exists." >&2
+ echo "*** Modifying a tag is not allowed in this repository." >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,commit)
+ # branch
+ if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+ echo "*** Creating a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,delete)
+ # delete branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/remotes/*,commit)
+ # tracking branch
+ ;;
+ refs/remotes/*,delete)
+ # delete tracking branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ *)
+ # Anything else (is there anything else?)
+ echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+ exit 1
+ ;;
+esac
+
+# --- Finished
+exit 0
diff --git a/gitflavio/index b/gitflavio/index
new file mode 100644
index 0000000000000000000000000000000000000000..da9d4ecdfd613ca0e711e2cb268c7f91065e6fff
GIT binary patch
literal 5227
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
literal 0
HcmV?d00001
diff --git a/gitflavio/info/exclude b/gitflavio/info/exclude
new file mode 100644
index 0000000..a5196d1
--- /dev/null
+++ b/gitflavio/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/gitflavio/logs/HEAD b/gitflavio/logs/HEAD
new file mode 100644
index 0000000..664eddf
--- /dev/null
+++ b/gitflavio/logs/HEAD
@@ -0,0 +1,12 @@
+0000000000000000000000000000000000000000 c78dce76a359499e4d9aac8987ae5a7f7f937309 mariano 1777454275 +0200 clone: from https://git.lavorain.cloud/mbenzi/urbackup.git
+c78dce76a359499e4d9aac8987ae5a7f7f937309 6493631fb88f9a570c95cfab46b89a144a9e9503 test 1777455335 +0200 commit: start opencode
+6493631fb88f9a570c95cfab46b89a144a9e9503 9bed80d88c7128c3587329fee6dc3cf2f0efc9fd test 1777455383 +0200 checkout: moving from main to dev
+9bed80d88c7128c3587329fee6dc3cf2f0efc9fd 98dc9fafeb52a5c6d0130be29d5716133e086821 test 1777456724 +0200 commit: modifiche da opencode
+98dc9fafeb52a5c6d0130be29d5716133e086821 9a73f51de5135da21bbc52ca183bf1e9a48cd0f2 test 1777456887 +0200 commit: opencode dopo commit 1
+9a73f51de5135da21bbc52ca183bf1e9a48cd0f2 311accf4bc2817584dd35d611c7483bfd1f9d70d mariano 1777462043 +0200 commit: modifica x instalalzione - opencode
+311accf4bc2817584dd35d611c7483bfd1f9d70d b7bffdd64ff74d4165aa49ecf2fa49006d0f9334 mariano 1778580538 +0200 commit: sisetmazione instalalzione nuovo model
+b7bffdd64ff74d4165aa49ecf2fa49006d0f9334 bcc2b35da1d4bbc24fd1f1d15c3899ef9a469bd5 mariano 1779256743 +0200 commit: finito parte computer
+bcc2b35da1d4bbc24fd1f1d15c3899ef9a469bd5 27aac99d1555a75d373756d8727afeefd6b69376 mariano 1779260579 +0200 commit: commit - stable -
+27aac99d1555a75d373756d8727afeefd6b69376 6493631fb88f9a570c95cfab46b89a144a9e9503 mariano 1779260625 +0200 checkout: moving from dev to main
+6493631fb88f9a570c95cfab46b89a144a9e9503 4b3ededa083d208e7ce6e42b8632d295735b2982 mariano 1779260803 +0200 commit (merge): Merge branch 'dev'
+4b3ededa083d208e7ce6e42b8632d295735b2982 27aac99d1555a75d373756d8727afeefd6b69376 mariano 1779260816 +0200 checkout: moving from main to dev
diff --git a/gitflavio/logs/refs/heads/dev b/gitflavio/logs/refs/heads/dev
new file mode 100644
index 0000000..c515f3e
--- /dev/null
+++ b/gitflavio/logs/refs/heads/dev
@@ -0,0 +1,7 @@
+0000000000000000000000000000000000000000 9bed80d88c7128c3587329fee6dc3cf2f0efc9fd test 1777455383 +0200 branch: Created from refs/remotes/origin/dev
+9bed80d88c7128c3587329fee6dc3cf2f0efc9fd 98dc9fafeb52a5c6d0130be29d5716133e086821 test 1777456724 +0200 commit: modifiche da opencode
+98dc9fafeb52a5c6d0130be29d5716133e086821 9a73f51de5135da21bbc52ca183bf1e9a48cd0f2 test 1777456887 +0200 commit: opencode dopo commit 1
+9a73f51de5135da21bbc52ca183bf1e9a48cd0f2 311accf4bc2817584dd35d611c7483bfd1f9d70d mariano 1777462043 +0200 commit: modifica x instalalzione - opencode
+311accf4bc2817584dd35d611c7483bfd1f9d70d b7bffdd64ff74d4165aa49ecf2fa49006d0f9334 mariano 1778580538 +0200 commit: sisetmazione instalalzione nuovo model
+b7bffdd64ff74d4165aa49ecf2fa49006d0f9334 bcc2b35da1d4bbc24fd1f1d15c3899ef9a469bd5 mariano 1779256743 +0200 commit: finito parte computer
+bcc2b35da1d4bbc24fd1f1d15c3899ef9a469bd5 27aac99d1555a75d373756d8727afeefd6b69376 mariano 1779260579 +0200 commit: commit - stable -
diff --git a/gitflavio/logs/refs/heads/main b/gitflavio/logs/refs/heads/main
new file mode 100644
index 0000000..d00b060
--- /dev/null
+++ b/gitflavio/logs/refs/heads/main
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 c78dce76a359499e4d9aac8987ae5a7f7f937309 mariano 1777454275 +0200 clone: from https://git.lavorain.cloud/mbenzi/urbackup.git
+c78dce76a359499e4d9aac8987ae5a7f7f937309 6493631fb88f9a570c95cfab46b89a144a9e9503 test 1777455335 +0200 commit: start opencode
+6493631fb88f9a570c95cfab46b89a144a9e9503 4b3ededa083d208e7ce6e42b8632d295735b2982 mariano 1779260803 +0200 commit (merge): Merge branch 'dev'
diff --git a/gitflavio/logs/refs/remotes/origin/HEAD b/gitflavio/logs/refs/remotes/origin/HEAD
new file mode 100644
index 0000000..85da1a9
--- /dev/null
+++ b/gitflavio/logs/refs/remotes/origin/HEAD
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 c78dce76a359499e4d9aac8987ae5a7f7f937309 mariano 1777454275 +0200 clone: from https://git.lavorain.cloud/mbenzi/urbackup.git
diff --git a/gitflavio/logs/refs/remotes/origin/dev b/gitflavio/logs/refs/remotes/origin/dev
new file mode 100644
index 0000000..60e996b
--- /dev/null
+++ b/gitflavio/logs/refs/remotes/origin/dev
@@ -0,0 +1,5 @@
+9bed80d88c7128c3587329fee6dc3cf2f0efc9fd 9a73f51de5135da21bbc52ca183bf1e9a48cd0f2 test 1777456894 +0200 update by push
+9a73f51de5135da21bbc52ca183bf1e9a48cd0f2 311accf4bc2817584dd35d611c7483bfd1f9d70d mariano 1777462051 +0200 update by push
+311accf4bc2817584dd35d611c7483bfd1f9d70d b7bffdd64ff74d4165aa49ecf2fa49006d0f9334 mariano 1778580554 +0200 update by push
+b7bffdd64ff74d4165aa49ecf2fa49006d0f9334 bcc2b35da1d4bbc24fd1f1d15c3899ef9a469bd5 mariano 1779256765 +0200 update by push
+bcc2b35da1d4bbc24fd1f1d15c3899ef9a469bd5 27aac99d1555a75d373756d8727afeefd6b69376 mariano 1779260580 +0200 update by push
diff --git a/gitflavio/logs/refs/remotes/origin/main b/gitflavio/logs/refs/remotes/origin/main
new file mode 100644
index 0000000..3a42731
--- /dev/null
+++ b/gitflavio/logs/refs/remotes/origin/main
@@ -0,0 +1 @@
+c78dce76a359499e4d9aac8987ae5a7f7f937309 4b3ededa083d208e7ce6e42b8632d295735b2982 mariano 1779260811 +0200 update by push
diff --git a/gitflavio/objects/00/bfe6f899a6d08df50fe1151032f7d2432a23fc b/gitflavio/objects/00/bfe6f899a6d08df50fe1151032f7d2432a23fc
new file mode 100644
index 0000000000000000000000000000000000000000..75c60838c6deb10ec77ad4312fa09f56e3a58186
GIT binary patch
literal 548
zcmV+<0^9v~0i}~+Z`v>rhW9zY;#NgUf0)u#{FJryadS*ux4gZ`KPcVHq^k_!zhnSf@g
z=3))=}Q=*(Ny{KMo$|!x40#)wZmNk&q?s#Xt(pgl^2<74v~86>~~7
zm!kPIm7)zaB1y`0XFj`ae7^A7*1g`uzF(9FLQ+B_=3?BMvNXjy-^T!beUNJ|<|(!?
zdwd1%$3sFyw(NSA3A??lH?l
z?S!RSY)&Z8YIKde(W`<{W6peJbFGJoGZhkz{>U%e?3l|m-)f;@DmCg=VoXvU5XFO3
z6P*>#DhVpPp)a5XK3twEJoewAavxlrs>t66@*z{s?fhtL8X?^K+)o{^s4xvWXJSf*Q47)#yTVjanITBI;
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/00/d1fcaaa9d1d9244a8df60ddc4f46845d1a8456 b/gitflavio/objects/00/d1fcaaa9d1d9244a8df60ddc4f46845d1a8456
new file mode 100644
index 0000000000000000000000000000000000000000..975309002b9c3b41b3670449d139d3630d0c1c7a
GIT binary patch
literal 2241
zcmV;y2tN0C0o_?!Z`;Na?z4WyBoMlkA;%5!a-dpvlgLd3G>Kt5I4D#>pvbjEgd!C#
z8OKQT-#asV;Z>^AIuqAPK=lbp3w2adw{O8%TXFr^tZ`a#iFO)&-XVO!776tht
zzu!tVemeNM*E=~n>cJ5lKh%qez0Y3w!G~fC+qhUo3EZX`y!!2O`p}F{dcDNoNVW9?
z39sU9bjkewc%LnqKdM(K2`|&lCQT+UZr=QCzi*3NX8POY#pYgpjP;k-`Nn*@mP$ow
zf+Wy#N+FTtHd=xFoXaGnua;)-OAqk1EtYW&OI<;Hti$oQf
zgizl4MVv#;ZY@t6OMgnE(CE3>hmvVeH0hTNF5?job#YWmPbwMTjz;>}bEPx{Jb@tQ
zi-3O2vqI|sJN;-h@)N-OV1XMcgvlyWc%5X}(n}*)`xg39E;o#Jn3_*USujvvrfH1U
z>_=+hBU(R6c+PLTw^{QVTbPY*|39*8X&_ApC2DFgbSo@!Mc}cvWP9C8I)+<6RvOO6
zSx`D^g@N108!&lcf(3!ApY!b*gLWg{U?-xwVMtRTr=9eQZozwm1dh-6*u`gbj`B2(
z!Jxv6HfsZE4AXaWd+B3e(n*Xe7$TTlCO;NZ<=)J(qHW^Wt9Ne%!1&C_S=xq||NHvl
z>O#c)|Z|N2X3RZ!}>Wqg%SMJCS;Ep2)T0>
zQu_~*(2GqP>SK%Ri|gy@ySFnP)r`VmSjCGbeCQyG<8Pf`a`^%W_
zG+v6gGn2nu%isgtt!2KJ8CbjkW6
z(1jL;OMDF4E}CMJam2p3Th^IqD0R4VFdk#+Dw;vl$j3=c`@Q0O`q)9l)fqd8QSs49
z>$_(@os7GAqo=XV#n$Ejk^lIfTWr;X78$jXH7c2pRvYp3fD~!GXtJc$l(VEZM)zg5
zfVYCG7TOJAKg<04Q;hmUQ#+j<0%oji42q|wKvY!FGBG~?Wj}uVI?jw?R+hH&(z)Ls
zOltaU(
zm`LREzHzBQk2p6Hdg}q>5l0>P@ke+RB@1?a8Iy)sW76otbSh2mL``p)&B@Fbrlmt@
z$5+R_;vR$Bssr0s;L3D5l*treGi~n!XA$n?cisrsmBG>8fNr}fo!yYnj+V~(#5D!&
ztAmYNX@sV+xKH3td%*=T_6XKqtu}$oh8-++1JyvSjp?jOUzsRXxFxY+WmYm8F~dFX
zJBZ64dd@Q%S!3~-z_TWETxK=dNIv0*AvzC77kdIOVV^eBOM|5ih3hr;4!WtQ^uK8Z
z!g6?nn4C^Dwdq6?#yqdr8Q;)Pw=_;s@J_#*O>VCNr%U4v2)WsgLZN;|VLW6w)M2xv
zjZtylT??2|7n+SKohzDLd3I(sg!h+|=QkJCid+Wk6ds?F+OWZ@C=JJAo2py@Rm5pB
z7LVZxtZ|ekRp4)N;$rlhiQLaH$m>>vYKtfESe!jB&231B(I;S}j75O`n9RC1>2lI+
z!!L`#4>P&AjXulH?b+FBzDA$LI4?vQpW&vun1>F!SnSi2e0_%hvJUaPAFjLjF=jb(
z)Q4#$kG6G?afjsQ`v0$FCVHxLI2mICcVpUt$xW!RSk`xxVz@V`g(tp`vA>jYGf?$y
zl(hqpcFkKxt`bUg<7hBryX0}Jwk^xjMn*Cy%rgr@Lf3M&cv{01F|a$srbqfl6$Chf
z1eY5u>Pe4F?NXe^oMJB{0`2qo&cAomu&%?P8Plkj~6GKkjGf}^ErR(syn2WLmv6SdtaA=Zdh+zQH-dc^^_PBA8
zae{qH@0IjVU+cca1Xg0_yc*5O;=fDPH1mj?rHa3arhPdfYT=?HfMs4=w-3W=)Uue|
z6&Q_&isdHCJ(Bg>|0L_e4jbbd>nj}62|eX%xIu7~)y3j6PXPapw^_9Dv-`@]g(j#@~^y53TqVO5;K#xfh53U=@ox=y|KKMJd)esypgOXfhl@xe0ag
zrQ$36twdLf2sQ+G<>!-~-9jCB8i0qk&<;zDblcrX>y8IuF>~M|`;`qeC1#tNMkB1=
zZtTy84utp+EAq^b^>38kpfWSAf~x-^N$(Q<>vNmqCH{m-rCvR(i%XeBTb#W4adYLZ
z%oaSC=(H
PC7pG)(_jArHY}Sfl5c%t
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/00/d937889015edc16672a1aec414ccc184c743d7 b/gitflavio/objects/00/d937889015edc16672a1aec414ccc184c743d7
new file mode 100644
index 0000000000000000000000000000000000000000..91fb3923074a0820796c9aecdb2a9926035af88f
GIT binary patch
literal 1088
zcmV-G1i$-u0j*ZyZre5x-fus}H7g()a4gi#fG%-VD2~zzvn@|@(jV&}&=MUHl|_xB
zlBPr7Wk2^GeX$)$$xe)P$$%P2Ad7d$yYKt%&Z~m2V085J(GTOdRbKTR2mIK7cNs)J
zcySy~FPGlTpD%ql_oi?bh3{iOg7^NJviz-~wd7Ezf>jc(nIKToqQEzj)-{Jp@Kir!
z47`e@IdvAlEDkRgvtBQ!B%{K%CcKoil!wc^iXMZcpQMw^O>qKgPDD-RX(QK%Z>;`F
zkES^XYn;Dwe+{Nn2p6e}2#2sJnrl|Vr8pz$$EF%PXkwl8REDpH5K)XG3CKqMFRa$D
z$JSu4n=+M*mkIsEYFXPBuXNBvC?~7mhrfD&pO^R@PT|3+jVYiy>bpw*cb%=}+z{d1-rhRbMa7&-LsvVESZVAW
zEW4?Os03^9Ec=}EkN?v=Nx2X-l{C|iy+4quj@yyjRq`2Wp?k#~Bef${_nHfeiE*!V%;6D=CC_etoYoBA`a8@}HS!LI*}Ch?j$
z4rT!?a0LbXK=4A1fYzg6?u3*nZXE)Dnsua)&uN4-W=vlid)&@oLmY1O-;KTEv&|Zn_Ab9Wf3tVn%NmpfIkk
z0uOgBMysj7%i)%;u;K^FHHACI7pA1T$#B8m;fmd)vH;vnk_ZVz@7EFF=zcSNeYmbR
zV`o?B*ufb4)t0=(=3}5D4uDA9!?>tNuwi8*8Q6G3#qk2OS|sgQ?*j$g_zIG}L>TZxac_!80fYJLYEdzhWFx5>?qBR2$VP8{=l{K+e)JKPdG~8
z$$`{)-}^C9x#t{fY{LxHAbRkF;QRJbxASoVEu-+tTY675ke*m-0L{ZWv_6l{pnm~*
GNf>%}CLLS=
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/01/c931072d5746de24e6323d3f9316655d814740 b/gitflavio/objects/01/c931072d5746de24e6323d3f9316655d814740
new file mode 100644
index 0000000000000000000000000000000000000000..fc2256c32d7531cc034758b1fca7befe5060c1b6
GIT binary patch
literal 835
zcmV-J1HAlr0j*WrPTN2b?X$mPkRos*QfSqOHjr=?G!m5%lqXuDwKGmuIJUdH1|h`1
zcXsXdH3>wD9~{Ttxt%j}#tUN)zJCAl?bG2=GD{q1f_}&Zx>5=5s|WRxpd5bb9yrck
zujfDy`kT76vpaFh{KqtbBuu9~f*=-fd38PBbf7)QiP#)v!hD3wFyYrG-k&?+nfO#*
zDiO}&`8b9
zn4&VSY_j8tTb7r_>JAELSq(a~Jc>(Uy5O3e`lEnjIFa`|wjTMwCp&-P=m_?yHMH5A
zV}2Sah&Zl+0D*|-z@itBsn@sOn$XRc%GyR#a@Omm()AN
z>V!%GR&%>+Ewx$EX%fW~3Mw-|ff2O>dC&*q2sLSZ8j&v*n|HPJn_1=r5>C*um1taw
z_8`*p3~VCDYg2eb09F`m1zSiVA?4OnIvf&FP?B6BdOzc@!l8aF%wY%-J{L8)S_$+4
zed#z`#mWANTJD1QJwL5S@2(fwPX!U9G?GKe+OQJCcB1aTGV=}%Q^Tgr;l1`P>Uo~=
z5DB`{*{BU${&f{DB{rF-8Zw3R7A)G#6UZLRy7a4jvh<_AI*ahJaTcRv%!;@Ls$A?>adOZLQg$UJJnhFD3n7cF4mF-a0d63>-{k4V(|STZ5l%OR=FF6|Y;qvMMOKnFhH1NJ6CG9THN-=Do
z&~AOgvbJhQZY$(cw$EnhKf?12Y4Ok`WE)?$H`vBz!;9naBMh2U#&R6prk-uyMRQU3
zt1!2Ow8ewaWUFetf~bIn5=(ikaMc2zWNu00l$(M2tGdsus4XD~D{Ff%bxNGvW+Er~BlOw!9J$<5I#DbGx2IK0Qy@2b4>
Wf=AjM;#_>kXUvk6Jr4l$jT0#LQX1X>
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/0d/8b64bd85c5cf7509028a7cf1cb1646ae9d20e3 b/gitflavio/objects/0d/8b64bd85c5cf7509028a7cf1cb1646ae9d20e3
new file mode 100644
index 0000000000000000000000000000000000000000..5498fee849d60065843863ebbba33fb826438be4
GIT binary patch
literal 1462
zcmV;n1xfmN0qt2|Z`(Ey-?Kjjiy4p|By)!WE8sRQoHS0owQFD}Pe~vs66Fw)NsXk^
z1#7k
zp}xtf+Wocvywe$MZFR^N*?Fu7nVrbJD84Fkl4r%7agqv24&NS49($ufr^BNKRe2Os
za+u}p$n1A^A}`GTXZwO{DYA@8(6mskL@Ap;Z=FAqB4rtECzw%rjXSh$VCP3lQQb~d
z$~?;1e#R(wq_dkvD)()8pHEQ%
z+6x929D~9+YXEDg9z-#!6l@dp?2rWIbZDl-YI;HSrAX9}oCZhlXUD;L|J?A;i;IlK
zBrUjMM9i|0`R+}v?xZX2M}J7J1xw62D;-Mc^cW7~OB!Fj6@cIqMP(171*h>@CfT1&
z$GvWdVqipB5<{1(!Gn9{0V)9;hoI7`|`N%9Vy9?j_}
z)l^Pt!X%A#uQEYtiZJX26Mh|Kpoeh?ku;@}@|gaD8kbHE`rD1QS{Af9dN7^7pDxjQ
zM#F6pm%}0E0pD@AwR_MmPXL|}`@)Fd@qx-~niSRmsnJ}*mt3EItUqYl>ma8EbM{sxrvEUryD;QSG$^h#^f`T*X
zK6%2X-LMkKuJkfT$+LW;&%GlI@}d>Pc;Q&ssXAV^>&yb5m0S(im+Y%tdhcvfuEeZj
zq2MH<3DKgiKJ4CiqN8NDKGBr3lfTCA8)nDJmAr#Pw++GzNuw(-j*!awG-0aUtqs%H
z)JE~OR{yM)t_1*Nrx4!Xn7JWwgm8>f$>C!m61pas(CV(}1F%PYzmRZLX;TE89K9YL
zAGDgdyTtqMGkZxAdvGH(Rv#Be7VI`ZdlBg$aQ@0}#`qP;;E@i8P;I=0;jxhI2-+qX
z3u}Ol+|fFQ^JtpZDLkT?Hd2!a1{^gaT;t$T<5J0DTV4rIdjsSxPr5)
zw0q9HEecmGVpErgSeT+`@h*iWoejdBmnoxJqD}*x56;P}SId=L$;N-f#u|(H@QU65
zOBB+mKXJHt2LPQ}l0WIqCIcc@yF9*(_?+51gj?I|dZL@8TTZrU7e
zj;Pw{L>^ylYf4Zn-xoG(DgIT(dI~d&6CiK{@+}O)rI7y
z+3JhiJ3aTxSkLZGsK%YTk{XM>CyvU$Mc3LiuE`IU;bGTkckfjG-F60lS`})ktK23<
Qx!l>~wsYJ04+{&CN+l8H`~Uy|
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/0f/57c04a93e542f698d9ee8d5662296a10dd79f6 b/gitflavio/objects/0f/57c04a93e542f698d9ee8d5662296a10dd79f6
new file mode 100644
index 0000000000000000000000000000000000000000..d15ae606ab8555f9a0fc0e0927bb7e0072b17dfe
GIT binary patch
literal 1043
zcmV+u1nm2G0nJuRbK5o$?pePA$%T|_Qc8NsOeD|Pj%V!Djy;hw%`F3wD+x6Ppa5t|
zZS>!}%a&4>xQK*0GQL
ziH{N^w8QgWC!FRoaY9KJcG+JYhQA=Uz^pSOal!je@u?AVsN!6U(1LjabCaGj12)gx
zg<93uNrjlQ@Kr6tzJF)0JTU_XRax*F7>`jf5u2-7=M&8E!cfN}CT%)`*Iqd1P;3`Yk
zz*8_`@HMJFKpOof+??#}`V{<7$0a%e(naI72D;C+&P2i~&%IT&TrQ)jGK(lT8OTJX
zknXE=VgV|5n38w>e&5Sgkpr12p5j?kmZo-;Ci+nUNYpy+a?6IpA$!~J`z0#n80KVM
z)xG{wKdCG!cN`6U9NmA4H8&OttyoO0q=hl8oR^FGB0b3gx*Xd)Nx<4erfd18H)0_r
znCtP~E!qqQR&&Xcj9WW=?a)+I>0;AmG*Mal`fMPYbHSX5k~t)g__-&}ijGedDlFUk
z{?|c|6rN#E*M|M)hCzmXUygu(P`^Lh%aqF*nBz{a4m&vIB7?MYaxgJx1H0f^)&xii
zSmX{c?124TWp{z8Np5$ghl1=6E?aJ3byQ
z%!|8qJsv+W%B?p!WkwJ5&DP0HYdp8pdwfD)+@
z+(Q4O7(anqD)Yz+r=Jm?1(}9{NQcx9<&ysL`Q}nBaPi@0Zve1c?Z3?)PzossC`ZNq
zy`;6Yv!iLZmb)2|6LXlVBwwK3cn0n&1A4t!-=GI2z#&qU_!e<3qVl2-871BpwhAP!
zA-3LKbl#YYzmao-XW~yty9nSV9M`gk<Y4eOmzXv$w3?4~6v7L+DIRvU!>d`g&?k67EhFOmwL%2}pJj=o$
z-p@TbMFpVDH!G@A6(gWu@nr7tsq$n$GK#u9`9U419tQ;5h42Jk-Z$6jUo9ekSA$5qZle
z8sT=4KHT3`jPVvPA{#tq?fv1o@}E?B^H8a3AuE#MaY;PGw*6D~1{vg*Jhg>A3%>BC
Nv*}{1{0;dEz(Nuv2W$WU
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/11/2ac1a3d31de40ed19e31ebe2a09969a91ca785 b/gitflavio/objects/11/2ac1a3d31de40ed19e31ebe2a09969a91ca785
new file mode 100644
index 0000000000000000000000000000000000000000..e2ddf50e74fd21446c0d2681351702e18a9cdd70
GIT binary patch
literal 1266
zcmVkWPj=WVn9f`c$=8_JT7O=Kq+KO4g$3
zG_weO#PH@=e&SM#W^KnjUUALKwZ+}C;TZ)V6vdeP2&olv!>dX1e#3=4X!YR|xY)@3
z>#nxYJi!sj!i_DmIUY)&jdkXkt=n|PN2M&as`L!de3oE1NwMf9g_A_LQ-k!58+p;V
z)%}_i^OnL8B4lK`RS{iJ$jNtY*Ff|v+Lk)Q$>OY!4W^=zydtaovCe^K?9G^=0C2@?
zAuAv?qFg(V;FW87K;7yC#0kxC7RW($YdQ)WNOa}6f9CF{jQWv8vL_~5wrV-mN}pmR
zRpSt`dlE9lqxr7)ubL{s2Y7H|cpso~z@XQxn9h(*4=@6A#=|+HD<%2ya08DdjC)Sm
zN8?LW+0h*^HQyq8tfg9@ufk$Ve&=!%6r3kR
zGvE|aC(`x4!z>xKengnY?*EdNXwF&Z5X2TM@V_w3ol+4ZN?G?H#_b0v#_i{BW=V{)
zt*Wxz$77tj{)r*ac+I-jVtil;S*0;E5@)CvSutIqVqZ80qZF9Q$@U{JUAqJpGqVM^
zFQ|eLSmvuweXE*Gx$l=lF=hA9u%c2m)mm*2tL~()`@5eqowyF${okfs=hfxbM;U6g
zaz0S=VUMghed>6J&4ClQP}1D-F9`x4v}K=3^G_WZBRqYuW4^njwd%CNWQ`A|8OHI#
zJH}SWvM>}7ny@BVSK~0n6S1N#+#vszY0Ck+#bb&SD$ezXr4HUVOiEf|HN14r@6zIs
z!-{ptIsnAPPVeSuA3s-JcxEs+A$9}D4PyW_QGCYw_9jJkY)MXZ#;V4S1nGalO;~*BYdG$w9pp<%X8*2@erGI*_r9{e=Irj02IGu?&wXs6V-VYNy?+otZT?nssEbRtXtz|j^iW#M5G-EI{FfcPQQAkORcX8Fr&1aZX%v+V(%z7rWZ{f7Gy4Zyt)Vz3iCy+UYD+APy@uBppZ#jXdbtxRVXCt7i?p13DxhjIOX594K;{I5l)aqnv&KjB
tbrwhNdiHcV#=v?MH9&I;?tkuS*KmJ$$nN9u(kUDnmWzJ20sy&0Q{o2{UV;Ds
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/13/a1fd4350238bfc24cfb8541036f0bee8e4ca05 b/gitflavio/objects/13/a1fd4350238bfc24cfb8541036f0bee8e4ca05
new file mode 100644
index 0000000000000000000000000000000000000000..4d6ac812493f5acbb02e38be9f9b50d0a46b34f2
GIT binary patch
literal 1630
zcmV-k2BG)#x^3mK;Z_J414BTCJ)m&J`8l=(6O@aCqkM3^NVlDLnb*$&()rj*>;vYW4T_TCfMb`+AYF
zYw^tW{!SA}f^^O!n8gBK{C;_M-;VmNR^*0ECa%ZeMUe1I?eERCm}>t|Tdhs&UOm;{e^XK8=}_JdSXj7r0WwEBuEq*|DeaS77fHi+ov{-}P@iuHD|Z^OY&d?Ic&;zl
zWX9jIjnl*?n+q)c09hv*IzOWocnAxm6qzuOyMecGh3pW5M}`0>>xdNQ0|J>T2`UCR
zDoE1uLj~7ewE5tmuNE7^=qnv$ZQrt$i}JFk^U33l3-+7Wk(bVjx-J*r+wZs`R3*(JN|m#X_(e4fL0aM9rqTLb!JaDDe;NH0*F-oJo|k6KQCw
z=m~6cmNED3qm61mF=?o(T9mXG5j(>OsrTsQOjuXB#YtLPpI%$>L@xo_+&8hJFs9&2
zf>)2%UCt1Pp;s-9sR`+nPgkvQQKilJd@$fL3-2@{(dc(_D>Vs=T?KQs>c$vQ)=@0$
zm{p5%@_!OX*!$2YifSJ^nEx)#+J|Zia&`XlV&%9h!Id^nn|6Kw6++IPGkw_RLXAs^
zVg<}BME5^xfj?>is@uPZRiaq&WwyLHE=#^YUB6+P6AK@!osC4K=4Rh)B)$1^C0xo!
z7IF?P`f;aYv=T?btREf-HdopZPJB9PsKf>)S=2i+qb&k
z2muMcbQN~B<|ZV+Z&(YV92eDkqdF>xpSwCBC
z+B6WKqvAe!R?6gko~oY#>MPLIn4iUIgIM2+N7TI1x9n9q?&znsU@{G;R1Hdw=@Ja@6U||zzg@)^KovWB
zGKE_Xa?J?8;O{JiqFgKE%T=wd)17Iakjl`Hac&oU)FkaLUc#X1*~^Pc7$rU{rL|cC
z6#r?^qYn3f9f0b%CgJi7e?cj*TA$l+K^?M1>6_l>%N+9s=(3Z3-R;WmXZ<$0`EGf#
cNUo;JqIJ%>ZX1fsAy2cu9~ylBFT%tqEE8TMg8%>k
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/14/e1027489784b717661588cb43caa419eec86bd b/gitflavio/objects/14/e1027489784b717661588cb43caa419eec86bd
new file mode 100644
index 0000000000000000000000000000000000000000..ee6dc53dd18b0d0d0b26f45d293f72f6e825abaf
GIT binary patch
literal 1320
zcmV+@1=sp`0o7RDOY2A!-)H}dLqO_)sB(L{u!%giD>3iE
z@$=CU-Uy|N?jcesUbJ-R$6^VQWX4Rq2+z3orbmE3{!Hlv5^fhNo_Luu)&mw
z^aL5Ri<4fiLl)iVSzx$cavd19|@3!o<%o#kRqvxM}Iw7GMVE8YE~+9O2_c+
z8}xc)OEBVJd_5X=3Aa;_%1#&Pv&t#^3T?RLk*y>ZCLs4Ow|(YREc90y0mSKZ<{{$5
z%qg{|K$=;dbHpFMBOW{^^rkUhK7Mw_{)d~&lO@@lA;okH*=-#Q5NyKbJCAa04h28$sC9(F4kWY@xF$ks&6qTwjl#A7KO+*aRKzIM
zKZZptMg^4`8r@M7j`h>scr4Ht>ZxxMCZ$Uw7sjYaFw4O%c!h6R39KsgoG_6Nw8Bi`
zc$@-$!L0$2g2}_aJ2&`|l#nB0>_Ql5eB|P$qYRb8>>oTgT3LmKuY=@%wWpEBvx@55
zV`yP*)=cD%223Wu$i;+or)()W-lZ4atankOMPpjF2~9<%MTOp>v()V?m&0DSRJ4sZ#AKSJ+Psy*wKvcQ>}Nli)D2VDmER)X?|LZv@sAV8ui17;%3x
zW6>UQ^SbdGQs-K3i|le^VQ2;m&1dyh0)0U{1hoI0+ld#1lBM@(dM>>YXv{P
zUjbV(A!*~(is()PwY@{@eLI01pk<(>W4YO*ae5shewbT}dzW&*R6ev^nrV@sLm`v-
zT%>)sy6clLeM~_f#LP1EJZo9g+f45W$n;TBoZOYFW8-
ze<^e~2cLF-KoV`sj$)VcV|SfP>rJt>$GdGZZ*gT86!1I3(uQE8HCu={=Bdl_BJQYU
zXgTafhE4OmKqQz;EEbW`v%so*BEBgXo70o+9cu#sIJG8Xy<()D>@F~@x2d;oaqAE2
ep6~~>1)d)H16&hNX@QJOq;iLhiSs`)hxu$D@}+SmtJ
z=cpkS0?QIJSXi^7LzhbpDASYA3!FpPFENt$!Ic7k^}hA?e>|)pOv(j7%i~ouG`@dcqp~-uc|UE4@og6;vCZq
zZNP^{JJhZ>doC~nhfgld-AeUA7EsyaAB0Ok;RP1m!@uo0_{rHX@b%4itjiq;=O)N)%aK#;~I@M{gZTk
z_QKe|=PWIv=CN0_JLc+JOY3cp(a~+%N3<{*u}<@u$c!#BklJ-2=p^H_*)5kD{{g3`
z@XqJs^VsQ)soFYjs|44$hOsK-bsf>&yp8DYrk>_w_7--Sdhrt7Ij!30^A7no%i3_8
zXWWoPut%HHj_kz?i7G2^xnDC9dq~Ou$s>C*A
s&$ppzqX2CjEKH@d9nUZ9FW44BySKe_5?~%>h8rAh)9Y3H4e{4XF((f{@Bjb+
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/18/5b273ec42b62b8ae4f74e59eae70395cc88752 b/gitflavio/objects/18/5b273ec42b62b8ae4f74e59eae70395cc88752
new file mode 100644
index 0000000000000000000000000000000000000000..4f75d83002a7f905ccc23b1fce4ccf37cf24de31
GIT binary patch
literal 4528
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
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/1b/210e4c7201ee826cb4f0e479e5486307e9bf7c b/gitflavio/objects/1b/210e4c7201ee826cb4f0e479e5486307e9bf7c
new file mode 100644
index 0000000000000000000000000000000000000000..d916583c50905238d4963f10e67e27e86e9c3226
GIT binary patch
literal 5182
zcmV-E6v69w0qq=VbKAzXpYdAh{GV1_2fT
zrKpMjd*89U*j*eXMas=l&e#+ed%S)3d;1oHI30*DzWm$YzWT%dH?zrXYisY>vn}yV
z>~89VlfBE1!r_PcOw8i>O_Ydnnu*tE=ck)qXm4vP38yljg+nP`$Fu01*8A7HY(VRO
zy|p#Zr8rKf(=<6by87;G`hAk6vr&4N@UJ(;H0Hl9Wu8Z=YQCCe>0LO8B}_7m!#o#<
zc`l2qa3JK5g-k}dHSg9>TLM0_`5=ylA}_)MzB*ZSGbs>2aUjmKbR5O9*Sk1<{pPCw
z_VBxxFfk4y0^lFd#A{iI;(jIt4th>c1yF|{{(Tl^;Z#IPAv(!Gyq!-6GV}XnvY2NH
zK#)brje598-!5$9c`__uui^%_1S`IU1-m%yf%t5@XOHKdAqZ;je!m-N0tY)Hm@8xl
z+h5Z{AM3XTcq3FGFGPi$Hf*n?mFQqM+C2Vu3P03_ghIt2O=I=Ea~Bm8=rN1KLW=L<
zhtR*&ATxF$iX7a814PZMG{g0~K6E?6UAP5%(O7h!9H+@Ry6N?z9H&E4zf6$FMqS!$
zuScA=y)8u_9zDG(}9_jx#koUQ215KhUOM~#LC=)
ztfn}qRh&k=SpWh^jazNu90m4)_`IHt%$g-LY=DWzVVr|b)5u$kkK}NYil_Ud=vENp
z9t2@5vqI4SyLVxhfEEf~JS~^QWogs|w64sD;Y<=w{gBSZC>2Rsh)H-W#Y|??h_taN
zQgIu}yV9sc3Fwe1sMs`l?kXU~gL-cYygh&qVK95f=ZeXTY+jEHl1I|T2ds#cY?fQ0
z9(g|+fzIp#b8QP2;@ubHNXDc5I*3NWd-2UTpi!;GJ8_hJfFYMMyOkN)lwJ?C@EJ4%
zvrq$1gsTH*pccesb_4=zPgO-f+uL2Ol6S#u$zm56jfh|nfNZ4TI5+@liDO^m(s!i#IEV@M#qtn&SLMN0N2oR&T}0hI
zJ@hs$^^9T~#W9VVrioKkI|yGawR(gf{b4xDWPcp}D67ys-7m5i`{29`(-^$k8h5lrZw?{$4S80sm!=4%EwF@P4o!cLgp76-<27~%0eA(yA{_(Hfow!S57`a)Rjw3*u0I;}%VHhJnK7sw9leB4
z*|wHS!=uxarda3Q`N`qc%Wd(eKZ(XZ#}E)fpHD$nOLS0D4mHms#x-Sj#9&^C`&RE4
z4baMj`Xtm)WGvd1j_y^_`GggX35A`Uc-2t@tC>Lkn53hFV3y`ZAVM;h
z2Z3i=&(GeyK7HGNcX4!h{O!B*{`W7B`X{FsXn*#`83c5DEGjtTbI6`OB`sdHm~SAs
z>GdYjXe5(v(7%DqRDYOf<9?BTkO}PPI=BtvxeUa?3kU=#&LRKpt-L$Fym)nm-MZWF
zEg_`6xbtFQfH8tMpPflqVg?K?ycsx}p?Tb32B$MxSZC3CJ@jo~W$E-V%fkDv>42gf
zur<1Hz7Jtz+-Y*3+Q5|
zprtTj6$m6!0GSIO;P#-fm&h0libTM_-B}h*!|XmNfpgHtG#tihj#;H?w*o6VY>oj_
zY^+=z1Pni>RjW{JTpSE3ySqXpg!A%;ID*rlc1)xbEFqGApZ&NUF$D*A^nyb?afT`k
z@~MoxXX@)=QPd^HayX+7NBtOTM-V6~ysQtX6doY@h13F1iKH-F<>wq|>F6F6@pT(V
zSEGG$-O9Q4!J`mA|16#;Zr^`~-j4DjU&$XZc*BKT%y%aQO*jgR5JEl955#FWI-Er((8h5gWCa*s
zWqQEOu6TaUkm}0?Ar)lr=eesHw732^ffVzyGJy39*C_GOO8rYUG9$TEA
zi*N){Y2L8y{H>xCEFGBht
z2tb}W4qpzB=oTHv5hRc4#AHLDqPI{2N|uelqa56IFr)?hW%~lK8%VWBvgvsAqyn|v
zUk5VF(hTyVPawL2HN2#ulJEviw`@k)s2Q`IrP_^d1VihEGhU!!O%u)fdht&Ny1nMg
z@R!-wQ#gmnk}$ps2YJ1U1x>5zqt>bV5oe&M#o_s>Angqfu!{PD-iwo|h;sh03nAEv
zFm3>!Y+iDbR(DkcSfrGR_C~aL9D;lf)!z(LS=+jCs!w|s*S1zwuS0FX*e}-$pSwF5R
zkPD1SV5+}|<=w+F?1>+@x1v3E*AQ`&2NI1mQ6X_^$^8!SvIm=&pZ+m_Dn`+G3_g>9{KvEm8q`xSNN^?HUQcE9
zqghKA3ndlY;#{6|V3TFA@h5&fcGOyi7}66T^~@I?o~Qg@&8SsU%}j@&t-h7_OHSme
zEoZ(9QfXX01=d=zJj(Qr_#DrXOR)Ga1srKPXC_t=XQ2JOX}GFrT7Y}eS
z!~L|5;XynI?|7Y#uf=Mcx1~VE1}hC@sw>2^c3&T}+745B(qktX
zO~z3}(NM;LNStGxg9*5do5ha;a3VGO0CDUh*Y`J;&GM`iIVlLY5B4`vbHE0L3R~(W
zv#!hl{hue*%_^VLH!T|c_VXmfkM8LnVq1#Abg~jRw$lU0%mjph8dxt!;
z=IG6Gn7yY;3vAIJGe+m?4UMr!TfP)>=EyGB&H!s4I@9E6O1&(8LyXd4)-s%?$8h>b
zKXh8{um)$r75|ZdP)g84{}_+)FIN{~FaE%atd;SUEG&4~B{4qeW%}MOtqhLA+0Vip
zC;}DIg2TBbXTOS|{JRLJ5Xt1P&V3TVgrdd4Iur
zs%n|eW^bb+l3p^Jxy$8frn!exJlur|?lpa@TVuZoitVTAsF9BulST%XxH|-7aw+b+T0KlgEPnlMO+^#Fm>dp#M*6IQet3o>J9v
zQFE|KuG_D()T-q+0iIkKe^1HDFUa9*_m?qq*hG=d6}I^bpWIEl1_U7m9ZN!;r^ewD
zY8Dkst*XTbWdP5jcr-7HG|}f&0bf7r^SZFs3b26w_e*ltbmcAEg>-77gepUP1lx_f
zHzu#@yJ%r{j+vLlzMl3w@NHgUT@tIkGEjXW?u>r4;b^z`cF$U?eSt<>3M04D@sr}agKnPfGW#eHs=?}l=
z!xq$aMLNn=g{87Fn`36Uf2yXoZHvcs%kCYwjGrYfY%Jb<&iJG6q9tG`DKgF+6^@KihvNp1xkn@mabQ_Dm5%!pb9t}
zz*{!aXtAW><|Sf9ycV|y$A=4oMG9{!#l1Sr-DuL?JGb!8q3Sd1YR7AaP=Bed4COOf
zm6vR=vSs{)?1LW-k&_J8jgvZgzQS65Q!5BvDoF{*uzNQaP?S#asO$mbE;xPofRUHc
ze;%}=GH&uJKu357gm6GPfyICoP_i})#(%DeMaZQef
zs%*BBeKkwvz=Zw5eF1r5cR75p*`+M!Z?h9m^BWI%IL^Q-ilvunPOoB!s;)FPbNlMI
z9QOWf=0)jHxF-sd$Zv2cufi>zh4D|=+6Tf}#
zodkCT^1KHD*pLwM1#+VSyiisL>XvnNnsr8f~P3h>04mTNvLO%;A_urG9d{kkns*LBrO|?V*H~7n4apdSv8qD
z7```$i$l(h&Tj-~L|gjtX`$e_R?x4O-lX4zIKI4ORj0a|5f3Slagw(FPIuIM#Po*B
z-vny;lOSt#?9pC4>K$IK{j1e$SnIHh>pQGU_T(?hHV2Ec{tMwijf=IG1dl{X7*)>of?u
zKI*3e0lbmE#Ovzx0wBLw_(wnM1pSjn(pXC?3zO8ZO6XG2wJCyFSc#^Q&>8YO=wN`p
zJ*%tPyb_633MrfyX(^BH(KUl@plXESw{^Q;)30Wu?NT4m6$iUQ27CjnGSPiozz;Hi
zn|9rb8c-veYwUp*B-Z`?OL$2f6mEHiaRFUlq!OWEq5i0x4!WwusGSB~(x5p;)w8Kz
zum14Q!akk)P-yJK5g*n+TH$}GM(jSu$+cMS{|dr3iIyDc7n7iwTJ`lG>nRAAWEC-o
z*PlVa5<;y3-F!X>oc{O%35d_X4CuvG2f<%ItHj+Mdw@O#R#U#%uM7TJx_=d##hhcU
z7;o54$Xd>Rm6qvBDlg?vA56Vb+5y2cuyy~lU~ufa*=rd^3yVYF-;9O4CH&SG#H+C~B8i-7<4H6xyuND8qmt-kosxR}-Ad3o%Zt^fq
ztvYynktTu?DHsfV5g-zZ5Lh-<-(Im2Y08P1GUe|^!hE}sD6imMsS@AkWnG+GKoiV`
z0!gN`-8lLnxw3f~;+RvWO%cdU*xeL;Jc3nT=Gaaz}_n3XhnVyUkΕ-/O|hSN; JPM#p/G)ׇ5x)hu[
+}`*Qѝ0vA%dt~iQј8ۨ=G5G\aKT
+ULoZ0ſH8Αݭniz\x'#F$DҌRR6
+*I;(Hgpn"3Lf%92CTiu#
16˥~Dp6x"P3AqеVw`VW^nC5:XmnX:t}.Ri8S1Jbyŕ1Ő&&^w2 q1Z/ݤO}Yc9(5MwWN
\ No newline at end of file
diff --git a/gitflavio/objects/1e/bb463168f36028ae98c61581e6c8ff953617d0 b/gitflavio/objects/1e/bb463168f36028ae98c61581e6c8ff953617d0
new file mode 100644
index 0000000000000000000000000000000000000000..45bb7ada39f07a030be2ea9bf6830ce6c92fc328
GIT binary patch
literal 64
zcmV-G0Kflu0V^p=O;s>4XD~D{Ff%bxC@9KL%gjmDOUp0H)hoy-h>wqF$h)w1Ie&VT
WN?Z@eOzCT7|2C^`GzS3oqZB6>jT&+Q
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/1f/9710002aa168ed7592b58b9f2d9e1f3431d30c b/gitflavio/objects/1f/9710002aa168ed7592b58b9f2d9e1f3431d30c
new file mode 100644
index 0000000000000000000000000000000000000000..1b296a0ef9d7825af448957ff254c76bc1a730bd
GIT binary patch
literal 1424
zcmV;B1#kLz0j*bUQ`6G-MFhN%cRe4XbQ=azqMK#b2tqm
z@!1Q~nFv3hNqHCV=a22vks34qE{#67(beRNjjJU(GMtK8^|_~{4!&Ao$kjbpkDVJw
zs)a6C9E*G2Hu(Y;Ll%gOqj0=mt4;V+guG6?^U-PVl8y!++MSOhk6w2N!(RWAYy;V8
zylw0fOj?!f1uCANdp#}u`gLQcv9nRS{nx7W-dWy$1iv?H4&_!F!7UQ%Y}dD1nPdj?8TK6u;JK~aS-<~r
zh&j~wFFd<3ux_gUi%)}*G{CLE_j$Y
z34QxgLq+(vY?BpLpMFg7g6%PUR2LHT1!1#aT7E0>;p;HO2uLptuJ%$
zl8ZF2m5Lofd_&YUVlz(4U?x)~!=#ysG^SE58aUR-rq;UXUXJKhzkPgMHnxHnHd%-a
zfJICh|6Gq0{j{As8g}VLdpPV}cWJwGg``}*MuTdTgXkIU42Na474M>S90i@A$HE#g`}D;Pr=Bw0GHCGfpyA%_)*bGEOx2V7ajJ
zmW4fh2>PjE-zSr=%R_FoM8K{M9A7!y8b({WJtKac>oM*x=!b?B)4NRB6Q&gVeh?>0
zgtKi}h;Mvy^x#;qw(_vGV@A35!=TBIm6g6~(ZE+LK(^2xMr
zth-EWgkI_Q1-m)fI>(@|f}=zDJ#JJXSKFxaA-}|qDlKapX3ByXc~n2Kb3@OupA6OE
z0Lam=3H9KoBegF4?@0Bln0*aEim-?
z+i{K1#$R}km}CosS$K~18%uoEySAS)O>o%%k$JKARS2ks;<|&
eWdUp`Y50qR$qoH%IJx5E0p+5_kp2VupbKfhN6LEu
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/20/4ea8b1044799df5f383c9b7489ba8a876a7c03 b/gitflavio/objects/20/4ea8b1044799df5f383c9b7489ba8a876a7c03
new file mode 100644
index 0000000000000000000000000000000000000000..564da27c92026337d54ea0beb038a4315f75125a
GIT binary patch
literal 70
zcmV-M0J;Bo0V^p=O;s>8W-v4`Ff%bxD99;I&&-Q2ElNsE&Mqy`P0cMRsnjbj%waH1
c3d)iFq<`SYwQVomtgP;TRCBZj0EP}1nT1*$k^lez
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/21/5277ac86967035797e47da0b5010a87ce0b98f b/gitflavio/objects/21/5277ac86967035797e47da0b5010a87ce0b98f
new file mode 100644
index 0000000000000000000000000000000000000000..9510d6ce17d4f892130f3d87523a642b911ca1cd
GIT binary patch
literal 71
zcmV-N0J#5n0V^p=O;s?pWH2!R0)^z_Vum&6yXQ@6ZnTa6xV+Xp&%e?(WpgJ)HmjIH
dz3Ph1`)@V>9H)Sw1FfcPQQE)6SPAv&ZOwudJC}5Z^lzE{gx%B8(P0p%m
zxnEM(zAGJy?MrL>*<}F^0z^a^2tw5EXmBz^GMApNG$>z$#~L`T{qnAp2{;L
zTl>jksj-dj4p7y;iN(d4WvPzIAT40UkNCbb3--yFynWR7%0F=RqLr?bWuS@!it^Jk
zb5g;|xH7z^?XlHraP)c@^>%x?>5`w{+M&vVQ;W)=Hn;DK?^-@{?p?$4U12F-&&6GF
zS-TZQ6*z#v2D*tJynZI){ht3Hd7D)iSekrwIGPDn8d{W;n4Dc&;8>99oRgWFR|3|M
dc(-b)ZQgF@Q%rq7FBRnds=oOy0{~3Jn}VtLtU~|*
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/25/9e2ef94ae4f4aa5f93125a6551690a28af573b b/gitflavio/objects/25/9e2ef94ae4f4aa5f93125a6551690a28af573b
new file mode 100644
index 0000000000000000000000000000000000000000..59b7108c44e643e25589621a709a63cf8234074f
GIT binary patch
literal 1632
zcmV-m2A}zO0mWHcZ`(E$-m`xN2V{^OH1Ps7*x)YR)+7yr-m;__Ftmk0OSDZ?5>=8)
zV-)@GJBOrht}R>6#eT9S@_gs=oeSwvEJoz_!`}{n`s2@Rn)P~v-Q6D9C42YvL1EYO
z1r0yv8Oh>&!c#I9lAOK1IKOWoly{ygP2+fwXA#wmWKx7osS=VL9PGm~T!|XMPx6LO
zB-LD`B#bF6jRaF96`HWyOejV|$w1P3I*OU!AJ8arUr`P@7D)!1;hmM|EQDv8$#m$T
z_6Se8<}@ZMoU(*knFu+SA|Y4*ye4A~B67vk3E4S$vG-i&=}UOz_Yq~U*vD=}oEu&3
z(n@#G>m_G#$CH>
z!S&^fzmH#CUj+Z2US6HQdkc0L4^%t%o=03|F`c~uZqo_#gTVLZv&^YssO>!=UZEej
z)CpXsxMe)pVK^ID$M_Zes{Pi%L1==n0`M;oxv?Dsx(wazhE!x)&oZ{D0LA1DlXu%~
zl-N`R#2*>CaQhDd{V`KrkZcMKhb&dOWG9xH_F-=8mJjhjhq`1M4qfCg`DCgUzBR8M
zf3?gZ->SqoHs!4>Q1j`~C{SfCWK`0mVlJtITYG5KNJHj|V39yKf=BBm&|)5z#jJ)3
zDQ3jl6q`U(gIWu9w8$LEzT{9BBFjZZj>re&6Lgz5fx;Ecv(b^)d$M9(Mbni_9U<3T
zXQ{VxaX~V-@Ka%N!WA|XYj7|YIh3^{GN!S@YKwM57iKh^5`SmjJ5-S!le9(c#pR|z
zo7QAro!)W<byAiCs4WRFaHKS0$S0+Nk`wq=tGPEc&Y4G!o)fQL
z;^-L0X8V{&MM*12)sAK*0-R>Ix(Qa3YIQPv{j{E3s0u8wG!rSBqj|#MjFDtGU?Pp$
z^)mYt0oKfIU9=a+_NM;;qw3X;q*c$^CQmCZ+=O@kRIMNy#qvSe$~8-H+{8FN4r93r
zD4ZZ}3?v>anyjr-o|i2}f(Hcfo~=ZXKZ7
zFv#lMB@8M^IRSxitW>X_=30P{_1u+y!0$pN#
zvz%sKFt#^MnY>?PlB)N~HI_Fj{Tl1n8Pv@2L2Z9pvwA$(Dan>t3-a*iq`CX7z@p!6
zxafM;FDLqq2a7fo_!?#9n?0pRTmD+?&Jy&nKN4}UG0C-ah{Jm~^!ola@sc?PaYuC#AO&{yysZYR^Qi#q54;SmKHTAi;8dr@H~`xJva{Ea(vH?e*$N)e+ln{e?r-J{1&D7slEKkc_yIja|rH%
zryx_+B76<5!k6LK@K!jElYMX>l=vHtr=i62JQROzXTJnr<^5eKar_2F-@hGq;*>{q
z0Lu75DEgj);{OdO`u3pcdj-n8Po4b>$7@jH`4)=5pP-!QIuw2Xf}-z^9kp(Up`3FX
ziodf^^nC@2z7~qU??ch|W5=s*{3|H>{s2YaaVE>YlMt!Y6qNH!L)m8@ioWNe=z9T*
zzC9@V{s=junj~1!_em)6pLKi*N<1AX{@!u+4k-GvJC$o;_-g>D(Blz
z7yq(nziA#0(&e0!bkU*T2va>u-$|D^UT}wE+-&9HCu5XYi*qNVnlFeaBYGigt7cjln<95N3yoTc(=`+JPw_&wK@$-y
zirb|neGK#?baS;o$dF{F=$Osf(OHBs&b2SO_5RC4Qtj=j#VF#@sKvCxITJ{7>fm#A
zZez|hrLkNUgf3HZ5OkzQ)H3B{)Cy;)cGGN2PJEr0twz79JT2qBq--Ng?G!PjU@&hgHm~yT@*PS(rQ9nwEu$}%req-&S@=JDess!HMZcV?ULF%p-uYwvuDP*0tNYLtX%G4E6k}M9p9c4R-}*ERzB&KjPs2Zcj0DJ2#4Wx6
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/35/62526c1df22fc0f8d6b6e9463a3adff126413b b/gitflavio/objects/35/62526c1df22fc0f8d6b6e9463a3adff126413b
new file mode 100644
index 0000000000000000000000000000000000000000..4cc94a1d26ed20a6f45cab4e9d5ac2b9dcc98a62
GIT binary patch
literal 672
zcmV;R0$=@j0nJv?lA16S?XzEzx5b%#&{jL`bbMenZkYmZF}CYdh!`=mKo|(_^zWOX
zfVQaUOuIfYnVf`k@5w#)E&{#)A3EL7?}iT45d=toFd;C;z@8ugpN%P+0@n{>hT|af
zS%kA>LA;kN#vYGW%uijQwE%G0(glW%z|5W+k2W0T=k1wk0)2)i*s$gO7PQg50!JjI
zF8HB4!>_udz3=zi6?_E8`piV&?kWeh
zPaywsJv`)+=^5mcV_3Q~2jAcvXezX}`kh+ssB7DAyVVBJel%=2FrtW$9!iQTuqi}?
zOsqbIiyjzGOjD+}SmP{W9$!lG3^u*DX6sG3sdfwG2f8t
zDNQysxk_>x2__g#@$t$n3aFGapDFH2+hyHTT5sp0<*T9GR+ib1!G7g5C{v7HNVj7F;(?
z6lWXDnJ|AXYW(o8p<*`_=6Lz=P7EIZ*BNHE@qGrj6XGs4VK6i>Ff%bxNY2ko%S_kHD9O#yD=E)RXIRWA*BF}Dy#CO^
TU|o|#-^EVvv0(rJxmps-`{Nt1
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/3a/3c4d169ec5ca603e940c6ee57305c4200867df b/gitflavio/objects/3a/3c4d169ec5ca603e940c6ee57305c4200867df
new file mode 100644
index 0000000000000000000000000000000000000000..5c98ff5e551abb101d7c91041121652eae7ce843
GIT binary patch
literal 1447
zcmV;Y1z7rc0qt4eZ`(Ey-n0J-1~VYLNahTC80I!9oF7gzq-$U&Pe~vs66Fw)NsXk^
z1#ABI-I0_;Tb7fqX^R&1iyiWK{CM}>@p!q;#5MW-x9vZEdi6TL$vd5d##tn3Pie_w
z9qRj>s-0i^FFT#Vix(a8f^0q42bG=6y(qpda*}7ojB%0*NsdlVkDq&^L8rr`IaPTS
zQ*xB$?9}Xcc`mQb{+IiLYbmmfN;qkuT7^)#N&l$?pMZe{S8f9UG8g<{@9eET%Nsq5`&wB0*}x7)z(|P4#U>&jOt!c%EG~ez}v|vQ6WoE3FCUb
z1{4Gh+dd4IlAZ@;X9qSQA3j)kM)Rv3vW+7f#&040hbgVX>0)b1Y-N)oceFKBm
zF36X!W)edaAR4FdYxbh~DnlEiSuw_yj=+H;C3Q|PG&1vs*JCN>2Yc3*NVR98(g-t!
zv0{pe?d#dgW}~OXcggTNftfI`46EKV9p6BtT9wNo7e{b;1+m~9;wu{J~un{{S^pB1i#>r3@jE`4$~DOX}v
zu~cw~XhO88s}H;PqwFZvtxh!M?D1dYcMY@S%eVQ=U?$(Cs
zYiV=vl~(_(maYMSu~P`|Z_M0~I6}BaspRluE)u#Tn9%C3=mWAxe7}%zRcTWMoSz1+^g?WT-oiMj}IKDZ*UUoTd2r5gVmQElzUHxZvv
zTlG(=#_GP;^)`b7X@ORus~wmZMIOgFVLkNFCz`ng73G-FpJ>Z_fk1?x!NsE6Pay0qphuo}KN`tPR
zX^u8W+H0PKX7vBoJg4WAqcu;5A1V90OxZS+q0|s}uEu|AwruhencW<1jx6O?uj|=t
zi@M1*efgXXY>ltr#nEWX=ghqTaMtU}A04(g<>3)(3qZB1C-48$!E{pU_H)%NYWC)<
zo=e?x!dKc-&m8{wA@5z!-3DA+%e`JN&$xWx!hugcj^2%7x?haJrL0qB6
zVsFDq`A^{bG>tdzM`QT7H?VtxD!^7G-5C`FfcPQQOL|IE=kPE(JRO(U{IZ>_tWdimsRnTg`!de
zGr2U@hg+K%0D(eoWpQB+gM#0RjV$gn@5fu%%r5EN)zzL=!wfa1G!NMzSEtrj9IRzu
VZ_oVCbHn!9^1>p=l>i9CEv0#FH%kBj
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/3b/25f0d2e7ba99cc57fd06590ccad42117d56e1a b/gitflavio/objects/3b/25f0d2e7ba99cc57fd06590ccad42117d56e1a
new file mode 100644
index 0000000000000000000000000000000000000000..8a6736a1168c8605a7a4d1899ed4bca2b3ed2138
GIT binary patch
literal 499
zcmVm
z1C##}t^xOe5&!OYCVpLm#G;xci7r|CUO}lXsFYv)SYC?N)zu9j4%x4S(G#(k(1cY_b3ut4Wo(=Cq64ro?lZG9Hg#$}DW
za4Y=`A?22Lk~o{4GQRbe(fQb*-bsAon@$}~7MT4M8IAFm?!k16AwY`}_bty|RX@@$
zy|T#BOwxZF-PBGfFyKM)&?7t~B#e&a2!_Od8yUgE{&oNW
literal 0
HcmV?d00001
diff --git a/gitflavio/objects/3d/47b597ecf2e93c4020cdeb910a06b99f02ee39 b/gitflavio/objects/3d/47b597ecf2e93c4020cdeb910a06b99f02ee39
new file mode 100644
index 0000000..70f8311
--- /dev/null
+++ b/gitflavio/objects/3d/47b597ecf2e93c4020cdeb910a06b99f02ee39
@@ -0,0 +1 @@
+x+)JMU01f040031Q(N-*K-/I-.+(`4zĸ(u19/
\ No newline at end of file
diff --git a/gitflavio/objects/3d/5eba338b0383acac7cbc8bf39ef882ebb52945 b/gitflavio/objects/3d/5eba338b0383acac7cbc8bf39ef882ebb52945
new file mode 100644
index 0000000000000000000000000000000000000000..c2cd0a6234e83c99f12fc1507d950688dcd7a74f
GIT binary patch
literal 367
zcmV-#0g(Q90V^p=O;s?qFlI0`FfcPQQE>Kf^mBLh@psqDO<}NVyR>X(g6{GUq9H%_
z*3Afiw9LE%sxHXY(Z$ylr0DIL
z&d+1un(^v}n7+WwXR`JD`x^WnA9B9E(8K@;6w-?F^GX=xcDos7d`{3TQq!u%X
zPV(_jzozK?S9NZRY%0gW-Fr52LR1u#Cgo%%Gdx%#w|ict_wz$y8FJqWG#oDPw0s72
zWpQdrX#v=oDjmC`gjuFLvdP|^*Ks>*?Vs~IR3WAm7bP=-1Thac#N5T<ҙVkyޜU
+dQDG96Ay"Cad6,mAќGWр-I6wZfa[ߎ*9X<:'BMEx_lZ
~z@q4"n.*389H4[Hs6vAj!:6!8.ӓ4-oy~ŔL
-|ffMlE"!%]g"%I4_P
cv.;ٲI#աcB
+x&\ۻyi<2s"*l0z+Ւb9>Imtg/8wܚUOI.NwnOhT8ߚʺkSV4Z$?csL"R/Xᬲ
+uUh1S&-떋<Izd桵؈tosc%+T6KEChK[\'/E&}/|hʦf2rW5ȿGŔJN=k#YKƯ
\ No newline at end of file
diff --git a/gitflavio/objects/42/dfeff5d2b6452efa18cff9bc55ef86c254e997 b/gitflavio/objects/42/dfeff5d2b6452efa18cff9bc55ef86c254e997
new file mode 100644
index 0000000000000000000000000000000000000000..6cb370f5182e79a3cb8c0262e9a446aa49bff064
GIT binary patch
literal 1412
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