text:
feature:  针对禁用业务创建订阅的逻辑优化 (closed #1934)

PR
CheckList（PR Assigners）
确认已完成以下操作：

[ ] 已将分支与当前合入分支同步
[ ] 已在关联 Issue 中补充「功能自测」部分内容
[ ] 已更新关联 Issue 的状态 backlog -> todo -> for test -> tested（需通过测试同学测试） -> done
[ ] 将 PR 添加上 pr/reviewable

CheckList（PR Reviewers）
确认已完成以下操作：

[ ] 检查关联 Issue 「功能自测」部分内容
[ ] 必要时打回 pr/reviewable，要求重新修改
[ ] 及时 Approve

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (38a8a11) 74.98% compared to head (6b17a7b) 74.97%.
Report is 2 commits behind head on v2.4.4-dev.

Additional details and impacted files
@@              Coverage Diff               @@
##           v2.4.4-dev    #1958      +/-   ##
==============================================
- Coverage       74.98%   74.97%   -0.02%
==============================================
  Files             403      403
  Lines           27829    27867      +38
==============================================
+ Hits            20868    20892      +24
- Misses           6961     6975      +14

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

authors: CohleRustW codecov-commenter

repo: TencentBlueKing/bk-nodeman


text:
🛑 Arma 3 Server is down

In c6085af, Arma 3 Server (https://arma3-servers.net/api/?object=servers&element=detail&key=$ARMA3_API) was down:

HTTP code: 200
Response time: 396 ms

Resolved: Arma 3 Server is back up in df7aa2a.

source: gharchive/issue

repo: Terra-Isles-Roleplay/TRP-Status

license: MIT

license_type: permissive

license_source: github-api


text:
NullPointer

We are using clutered ehcache 3.8.1 and after some time ( about 6 hours and under some load )
we see the exception below.
It appears to then lose cache entries.
The exception then repeats roughly every second.
Prior to that there was a single warning - which is also pasted below some 15 mins before the repeating error.
Earlier still there was a single ERROR, again I've pasted this below.
Any suggestions of what the cause might be greatly appreciated.
Repeating error:
2019-12-06 22:41:55,843 [WorkerThread(request_processor_stage, 2, 2)] ERROR org.ehcache.clustered.server.store.ClusterTierActiveEntity - Unexpected exception raised during operation: APPEND
java.lang.NullPointerException: null
at org.terracotta.offheapstore.paging.OffHeapStorageArea.readInt(OffHeapStorageArea.java:173)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine.isHead(OffHeapChainStorageEngine.java:776)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine.findHead(OffHeapChainStorageEngine.java:769)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine.access$1300(OffHeapChainStorageEngine.java:42)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine$StorageOwner.evictAtAddress(OffHeapChainStorageEngine.java:783)
at org.terracotta.offheapstore.paging.OffHeapStorageArea.release(OffHeapStorageArea.java:579)
at org.terracotta.offheapstore.paging.OffHeapStorageArea.shrink(OffHeapStorageArea.java:681)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine.shrink(OffHeapChainStorageEngine.java:340)
at org.terracotta.offheapstore.AbstractLockedOffHeapHashMap.shrink(AbstractLockedOffHeapHashMap.java:500)
at org.ehcache.clustered.server.offheap.OffHeapChainMap.shrink(OffHeapChainMap.java:345)
at org.ehcache.clustered.server.offheap.OffHeapServerStore.tryShrinkOthers(OffHeapServerStore.java:242)
at org.ehcache.clustered.server.offheap.OffHeapServerStore.handleOversizeMappingException(OffHeapServerStore.java:212)
at org.ehcache.clustered.server.offheap.OffHeapServerStore.consumeOversizeMappingException(OffHeapServerStore.java:196)
at org.ehcache.clustered.server.offheap.OffHeapServerStore.append(OffHeapServerStore.java:124)
at org.ehcache.clustered.server.ServerStoreImpl.append(ServerStoreImpl.java:86)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.invokeServerStoreOperation(ClusterTierActiveEntity.java:425)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.invokeActiveInternal(ClusterTierActiveEntity.java:329)
at org.terracotta.client.message.tracker.OOOMessageHandlerImpl.invoke(OOOMessageHandlerImpl.java:75)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.invokeActive(ClusterTierActiveEntity.java:317)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.invokeActive(ClusterTierActiveEntity.java:134)
at com.tc.objectserver.entity.ManagedEntityImpl.performAction(ManagedEntityImpl.java:879)
at com.tc.objectserver.entity.ManagedEntityImpl.lambda$invoke$12(ManagedEntityImpl.java:591)
at java.util.Optional.ifPresent(Optional.java:159)
at com.tc.objectserver.entity.ManagedEntityImpl.invoke(ManagedEntityImpl.java:591)
at com.tc.objectserver.entity.ManagedEntityImpl.lambda$processInvokeRequest$5(ManagedEntityImpl.java:376)
at com.tc.objectserver.entity.ManagedEntityImpl$SchedulingRunnable.accept(ManagedEntityImpl.java:1311)
at com.tc.objectserver.entity.ManagedEntityImpl$SchedulingRunnable.accept(ManagedEntityImpl.java:1247)
at com.tc.objectserver.entity.RequestProcessor$EntityRequest.invoke(RequestProcessor.java:182)
at com.tc.objectserver.entity.RequestProcessor$EntityRequest.run(RequestProcessor.java:172)
at com.tc.objectserver.entity.RequestProcessorHandler.handleEvent(RequestProcessorHandler.java:28)
at com.tc.objectserver.entity.RequestProcessorHandler.handleEvent(RequestProcessorHandler.java:24)
at com.tc.async.impl.StageImpl.lambda$null$1(StageImpl.java:115)
at com.tc.async.impl.MonitoringEventCreator.lambda$createEvent$0(MonitoringEventCreator.java:77)
at com.tc.async.impl.StageImpl$WorkerThread.run(StageImpl.java:307)

Warning:
2019-12-06 22:26:29,634 [WorkerThread(request_processor_stage, 3, 3)] WARN org.terracotta.offheapstore.OffHeapHashMap - Expanding reprobe sequence from 512 slots to 1024 slots [load-factor=0.48480225]

Single ERROR:
2019-12-06 04:53:40,671 [WorkerThread(request_processor_stage, 4, 4)] ERROR org.ehcache.clustered.server.store.ClusterTierActiveEntity - Unexpected exception raised during operation: ITERATOR_OPEN
java.lang.NullPointerException: null
at org.terracotta.offheapstore.paging.OffHeapStorageArea.readInt(OffHeapStorageArea.java:173)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine.readElementLength(OffHeapChainStorageEngine.java:162)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine.access$700(OffHeapChainStorageEngine.java:42)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine$AttachedInternalChain.readElementBuffer(OffHeapChainStorageEngine.java:687)
at org.ehcache.clustered.server.offheap.OffHeapChainStorageEngine$AttachedInternalChain.detach(OffHeapChainStorageEngine.java:473)
at org.ehcache.clustered.server.offheap.OffHeapChainMap$HeadMap$1.create(OffHeapChainMap.java:368)
at org.ehcache.clustered.server.offheap.OffHeapChainMap$HeadMap$1.create(OffHeapChainMap.java:362)
at org.terracotta.offheapstore.OffHeapHashMap$HashIterator.(OffHeapHashMap.java:1390)
at org.terracotta.offheapstore.OffHeapHashMap$EntryIterator.(OffHeapHashMap.java:1525)
at org.terracotta.offheapstore.AbstractLockedOffHeapHashMap$LockedEntryIterator.(AbstractLockedOffHeapHashMap.java:385)
at org.ehcache.clustered.server.offheap.OffHeapChainMap$HeadMap$1.(OffHeapChainMap.java:362)
at org.ehcache.clustered.server.offheap.OffHeapChainMap$HeadMap.detachedEntryIterator(OffHeapChainMap.java:362)
at org.ehcache.clustered.server.offheap.OffHeapChainMap.iterator(OffHeapChainMap.java:243)
at org.ehcache.clustered.server.offheap.OffHeapServerStore$1.getNextIterator(OffHeapServerStore.java:374)
at org.ehcache.clustered.server.offheap.OffHeapServerStore$AggregateIterator.hasNext(OffHeapServerStore.java:410)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.iteratorBatch(ClusterTierActiveEntity.java:616)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.invokeServerStoreOperation(ClusterTierActiveEntity.java:518)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.invokeActiveInternal(ClusterTierActiveEntity.java:329)
at org.terracotta.client.message.tracker.OOOMessageHandlerImpl.invoke(OOOMessageHandlerImpl.java:79)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.invokeActive(ClusterTierActiveEntity.java:317)
at org.ehcache.clustered.server.store.ClusterTierActiveEntity.invokeActive(ClusterTierActiveEntity.java:134)
at com.tc.objectserver.entity.ManagedEntityImpl.performAction(ManagedEntityImpl.java:879)
at com.tc.objectserver.entity.ManagedEntityImpl.lambda$invoke$12(ManagedEntityImpl.java:591)
at java.util.Optional.ifPresent(Optional.java:159)
at com.tc.objectserver.entity.ManagedEntityImpl.invoke(ManagedEntityImpl.java:591)
at com.tc.objectserver.entity.ManagedEntityImpl.lambda$processInvokeRequest$5(ManagedEntityImpl.java:376)
at com.tc.objectserver.entity.ManagedEntityImpl$SchedulingRunnable.accept(ManagedEntityImpl.java:1311)
at com.tc.objectserver.entity.ManagedEntityImpl$SchedulingRunnable.accept(ManagedEntityImpl.java:1247)
at com.tc.objectserver.entity.RequestProcessor$EntityRequest.invoke(RequestProcessor.java:182)
at com.tc.objectserver.entity.RequestProcessor$EntityRequest.run(RequestProcessor.java:172)
at com.tc.objectserver.entity.RequestProcessorHandler.handleEvent(RequestProcessorHandler.java:28)
at com.tc.objectserver.entity.RequestProcessorHandler.handleEvent(RequestProcessorHandler.java:24)
at com.tc.async.impl.StageImpl.lambda$null$1(StageImpl.java:115)
at com.tc.async.impl.MonitoringEventCreator.lambda$createEvent$0(MonitoringEventCreator.java:77)
at com.tc.async.impl.StageImpl$WorkerThread.run(StageImpl.java:307)

Terracotta is configured with a single off-heap resource:
<ohr:offheap-resources>
<ohr:resource name="offheap" unit="MB">2048</ohr:resource>
</ohr:offheap-resources>

and the cache being exercised:
<ehcache:cache alias="mycaache">
<ehcache:key-type copier="org.ehcache.impl.copy.SerializingCopier">java.lang.String</ehcache:key-type>
<ehcache:value-type copier="org.ehcache.impl.copy.SerializingCopier">MyCacheValue</ehcache:value-type>
<ehcache:expiry>
  <ehcache:tti unit="days">1</ehcache:tti>
</ehcache:expiry>

<ehcache:resources>
  <ehcache:heap unit="MB">100</ehcache:heap>
  <ehcache:offheap unit="MB">150</ehcache:offheap>
  <terracotta:clustered-dedicated unit="MB">200</terracotta:clustered-dedicated>
</ehcache:resources>
<terracotta:clustered-store consistency="strong"/>

</ehcache:cache>

@iainstarks I can certainly see the bug that caused the initial error. The second error is 'harmless' although it may be a symptom of others things happening. I'm not fully confident that the bug that caused the initial error is also the cause of the subsequent exceptions however.
If you could describe more about how you use the cache that might help.  In particular:

What operations do you perform against the cache.
What are the keys and values: types, sizes, etc.

If you could upload a full set of logs somewhere so I can look through them that might be useful too. In the meantime I can  build you a copy of Ehcache 3 with this first fix applied, and we can cross out fingers that I'm missing something and this does fix both problems.

Hi Chris,
Thanks for the response.
The cache holds some location info, so the key is a String and the value is a Pojo with the following content:public class LocationCheck implements Serializable {
/**
*
*/
private static final long serialVersionUID = 3033653990506158489L;
private final LocationCheckType type;
private final String alias;
private final String region;
private final long lastChecked;
private final String result;
private final String lat;
private final String lng;
private final long distanceInMiles;
private final boolean passed;
private final int delay;
private final StatusInfo statusInfo;
LocationCheckType is an enum
StatusInfo a wrapper around a List of ErrorInfo - which a class with two Strings
The list will usually be empty or have a single entry.
Not very big.
I think a log will be small enough to email. I'll try that.

Drop me an email to iainstarks@gmail.com and I'll send you the logs.
As for operations, we do a put, get a few times and then most likely a remove. We might repeat the put if the info changes. It has a tti of one day.
I would guess there would be a few thousand entries.
There are a few other caches, but I would think that one is the likely culprit.

I think I know what the bigger issue is and have a fix lined up. More accurately I've found a real issue and it might be the cause of your bug. Do you have a testing environment we can try a build out in to see if this fixes the issue for you?

Replied by email, but just to re-iterate: no this issue has only appeared for us on a production platform. We've tried fairly hard to reproduce it elsewhere, with load tests, and general testing and it has also not occurred on different production environments. If you have some pointers as to what might cause it and how we might reproduce then that would be great. I'd really like to be able to do that so we could have some confidence that the issue is fixed and won't happen again. We're a little backed into a corner otherwise as you can imagine.

authors: chrisdennis iainstarks

repo: Terracotta-OSS/offheap-store

license_source: bigquery


text:
Serialize with boost and C++11/14

I'm looking to serialize an ordered-map with boost_serialization.
I have seen the below code for splitting into save and load, and using the serialize/deserialize methods of ordered_map, however being unfamiliar with lambdas I am not sure how to adapt this to work with C++11 or C++14.
        template<class Archive, class Key, class T>
        void serialize(Archive & ar, tsl::ordered_map<Key, T>& map, const unsigned int version) {
            split_free(ar, map, version);
        }

        template<class Archive, class Key, class T>
        void save(Archive & ar, const tsl::ordered_map<Key, T>& map, const unsigned int /*version*/) {
            auto serializer = [&ar](const auto& v) { ar & v; };
            map.serialize(serializer);
        }

        template<class Archive, class Key, class T>
        void load(Archive & ar, tsl::ordered_map<Key, T>& map, const unsigned int /*version*/) {
            auto deserializer = [&ar]<typename U>() { U u; ar & u; return u; };
            map = tsl::ordered_map<Key, T>::deserialize(deserializer);
        }

How would this be done without using templated parameters in the deserializer lambda?

Hi,
Instead of:
auto deserializer = [&ar]<typename U>() { U u; ar & u; return u; };

you can use something like:
struct deserializer {
    template<typename T>
    T operator()() {
        T t;
        ar & t;

        return t;
    }
};

Thibaut

Thanks, this worked for me!

authors: Tessil k-vernooy

repo: Tessil/ordered-map

license: mit


text:
🛑 Proxy is down

In a2c2b5d, Proxy (https://proxy.tetragg.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Proxy is back up in 6f2f38c.

repo: TetraGG/Upptime


text:
🛑 Nextcloud is down

In c6ced7e, Nextcloud (https://nextcloud.tetragg.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Nextcloud is back up in 7efe2a0.


text:
🛑 Proxy is down

In 41bafd4, Proxy (https://proxy.tetragg.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Proxy is back up in df65272.


text:
🛑 Proxmox is down

In 9000961, Proxmox (https://pve.tetragg.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Proxmox is back up in b569cbc.


text:
Setting a value to an object

Hi!
So I am trying to use a combination of angular-schema-form-ui-ace and $validators, and I am trying my best to not having to create a special plug-in for the job.
There problems:

How do I actually set the model value to the resulting object? The ace-component will set it as a string, so I will have to cut in between or at some stage and set the model. In this example, I desperately tried to set value to the object, however that is not a reference, or at least it doesn't look like that it worked.
Having a function declaration in the json makes it impossible to store it as plain json, I suppose that there is no way of dynamically refer to some function in, for example the controller scope?

This is what I do now. Setting value obviously doesn't work:
        {
            key: "globals",
            type: "ace",
            aceOptions: {
                mode: 'json'
            },
            validationMessage: {
              'noGlobals': 'Globals contains invalid JSON'
            },
            $validators: {
              noGlobals: function(value) {
                  debugger;
                  try {
                      value = JSON.parse(value);
                      return true;
                  }
                  catch (err) {
                      return false;
                  }
              }
            },
            title:"Global variables",
            description: "The global variables that is provided as input to the process"
        }

Hi @nicklasb!

it might be hard to do without modifying the ace add-on. But you can try to add to the ˋ$parsersˋ and
ˋ$formattersˋ as well, that could work. Se the ngModel controller docs: https://docs.angularjs.org/api/ng/type/ngModel.NgModelController

Yes that is a problem.  Currently you can't do that. What you can do is maybe to add a ˋ"format": "JSON"ˋ to the schema and a custom format validator function to the tv4 validator. That would get rid of the ˋ$validators, but not the ˋ$parsersˋ and
ˋ$formattersˋ...

I just realized that I might be going about this the wrong way.
What I was supposed to use this for was actually to edit a dictionary(or object), the only JSON-supported base type that can't be structurally edited by ASF.
The I also thinking about the form builder project, which will have to solve this problem. As it will have to be able to edit JSON objects structurally.
So perhaps what is needed is a "builder" that can edit JSON structures in general either way. If you got that, you could just theoretically plug that in here.
I will look at the $formatters and $parser as well, thanks for you help!.

authors: davidlgj nicklasb

repo: Textalk/angular-schema-form


text:
--width / --max-width in SVG export don't affect the width of the picture

I'm using rich-cli in my latest semi-stealth project at https://github.com/hynek/hatch-fancy-readme and I've noticed that I can set the width of the output, but the SVG export will always be the width of the terminal. That means the right side of the SVG is blank.
In other words: I have to resize the terminal to get the output I want (see README). I'm a I missing something, or is this on purpose, or is this a bug?

The SVG export replicates what you see in the terminal. So it is kind of by design. But on reflection, I think it would make more sense for it to override the size of the terminal rather than the size of the content.
Fancy readme looks interesting!

authors: hynek willmcgugan

repo: Textualize/rich-cli


text:
Culler | Plans component not work correctly | How to use latest version?

Describe the bug 📝

I want to use a Plan view like this
https://docs.thatopen.com/Tutorials/Components/Front/Plans
but the first part causes the model not to load completely as before
cullers = components1.get(OBC1.Cullers);
culler = cullers.create(world);
    world.camera.controls.addEventListener("sleep", () => {
        culler.needsUpdate = true;
    });

for (const fragment of model.items) {
culler.add(fragment.mesh);
}
            culler.needsUpdate = true;

result: Especially when I rotate the camera at first everything shows incorrect and after some seconds loads 80 percent of details

And about plan view it is not from top for me:

Finally, I wanted to add the latest version but:
No matching version found for @thatopen/components@^2.1.0.
Reproduction ▶
No response
Steps to reproduce 🔢
No response
System Info 💻
mac book

Used Package Manager 📦
npm
Error Trace/Logs 📃

Validations ✅

[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Make sure this is a repository issue and not a framework-specific issue. For example, if it's a THREE.js related bug, it should likely be reported to mrdoob/threejs instead.
[X] Check that this is a concrete bug. For Q&A join our Community.
[X] The provided reproduction is a minimal reproducible example of the bug.

Hi! Please, from now own, create a separate issue per problem / question.

This is how the culler works. It takes a bit to load all the geometry because it needs to process the visibility of all items. If you want the culler to be faster when navigating the model, you can update it each X seconds with setInterval or bind it to another events of the camera controls.

This is solved in the last version.

This is solved in the last version.

Cheers!

authors: agviegas shahbaziparisa


text:
Making it more Interactive and Aligned

I am a Girl Script Summer of Code Contributor (2024)
**I would like to make the website more interactive by changing the color theme and background design.
Also I would like to add some images related to content & align them properly.
At last I will create a good readme file so that the new user can easily get to know about what it all is **

I would be delighted to contribute to this project. Please assign me this opportunity.

repo: The-MindSpace/MindSpace-Web


text:
Link to Books

[x] Links to Book has been also added!
[x] Improved the Scroll to Top Feature

Best Regards,
Shera Bhai

@sherabhai resolve the merge conflicts

@TeeWrath Done ✅

@TeeWrath Done ✅

Thanks for contribution.

source: gharchive/pull-request

authors: TeeWrath sherabhai


text:
ОП ты где?

Куда подевался наш ОП?

:-(

authors: bogachenko dimqua

repo: The-OP/Fox

license: unlicense


text:
Keep Track Of Warnings

Reported by @kareefardi
Prompt
Warnings are printed mid-flow, where they can easily be ignored.
Proposal
Warnings should be also be stored in an individual log file and printed at the very end.

@donn Does OpenLane use a logger like spdlog (like OpenROAD- https://openroad.readthedocs.io/en/latest/contrib/Logger.html?highlight=logger)

We do not, no.

authors: donn dralabeing

repo: The-OpenROAD-Project/OpenLane


text:
feat: configurable default timeout and interval

Hey - love the library! This is a very small PR to allow setting the default timeout and interval globally.
Was going to make an issue but I thought this was simple enough that a PR would be about as easy. Obviously up to you if you want this to go in - it's possible to workaround by wrapping this library's export, but I found myself doing that in a lot of projects, so I wondered if you'd be open to supporting it out-of-the box.
Side note - I noticed there's a file src/index.d.ts, but I'm not sure what this does, since the declaration files are generated by npm run build (which outputs lib/index.d.ts, matching what's in package.json). I left it, but it could probably be safely deleted, along with the other *.d.ts files under src.

Looks good, thank you! And sorry for the lag - I didn't notice this PR somehow.

:tada: This PR is included in version 1.2.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

authors: lgandecki mmkal

repo: TheBrainFamily/wait-for-expect


text:
Change the Attack damage from the emerald sword

So, how can i change the attack damage from the emerald sword, 9.5 its to much.

You go in the config file and change the Base Damage from Emerald. Above You have to add 6 to the Attack Damage you select. So like if you want that the sword has an attack damage of 8 you would change the attack_damage_emerald to 2


text:
🛑 Microblog is down

In 0ba0f60, Microblog (https://microblog.sny.sh) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Microblog is back up in 54b7a98 after 17 minutes.

repo: TheLastZombie/upptime


text:
🛑 Gallery is down

In 19dccf1, Gallery (https://gallery.sny.sh) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Gallery is back up in 46696b9 after 54 minutes.


text:
🛑 Navidrome is down

In 179ad53, Navidrome (https://navidrome.sny.sh) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Navidrome is back up in 8089930 after 13 minutes.


text:
🛑 AdGuard is down

In b7fec2e, AdGuard (https://adguard.sny.sh) was down:

HTTP code: 0
Response time: 0 ms

Resolved: AdGuard is back up in 2e88fe6 after 9 minutes.


text:
🛑 Website is down

In 7159ede, Website (https://sny.sh) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Website is back up in adddd5d after 24 minutes.


text:
Cannot load resources in device.

For our ebook (which loads epub files from remote server) app, we have to migrate to WKWebview and we are using this plugin along with cordova-plugin-wkwebview-engine. Our cordova iOS is 5.1.1.
Everything builds well, no CORS issue etc. in the simulator. The library and ePUB files also load perfectly in the simulator.
But, when the app is run from device (iPhone XR, 14.2), the app runs well Except the library. None of the book cover images are shown and the epub files are downloading (evident from console) but when opened shows a blank page. The safari web inspector says cannot load resources, operation not permitted.
Any help will be highly appreciated.

Try adding also another plugin cordova-plugin-wkwebview-file-xhr.
I think this will help to solve that issue
https://github.com/oracle/cordova-plugin-wkwebview-file-xhr

authors: AraHovakimyan csantanu


text:
Add tests for string exercises and project readme

Pending:
Escape characters test
Numbers data type test suite

@Kokozord Any updates on this?

@I3uckwheat Yeah, I'm working on the review now.

@KevinMulhern I've pushed a commit with the various typos fixed. About the README, let me know what you want to do with it and I'll change it if needed.

repo: TheOdinProject/ruby-exercises


text:
[FR] Send command to Tmux from Harpoon menu

At the moment, press Enter on Harpoon menu only send command to the integrated terminal. Because Harpoon also support Tmux, I'd like to have a option to send the command to a default Tmux specific pane, just like we can do with sendCommand

I'd like to have a option to send the command to a default Tmux specific pane

Here is an example for advanced scripting in tmux I used for some complex IPC testing stuff at work for the log output:
https://github.com/matu3ba/dotfiles/blob/ab31028b93816aa4032a2e2dc45eb3be2c6e9463/templates/tmux#L26
You can send to any tmux pane by its id or the name you have given it based on the session you have defined,
so there is no reason for harpoon to define all combinations if any shell can send it to any tmux pane anyway.
Here is the best tmux guide I know of:
https://gist.github.com/sdondley/b01cc5bb1169c8c83401e438a652b84e

Note, that tmux needs veery smol timeouts between commands, so if you buffer commands things may break.

repo: ThePrimeagen/harpoon


text:
Out of memory issue.

Hi,
With the lastest release, a panel using too much memory seems to crash. I used to do a cover cache, i can't do it anymore with the lastest release. Here is a example of code which always crash on my setup, it create a array containing the covers of the 2000 first tracks, grabbed with utils.GetAlbumArtV2:
var nb_of_covers = 2000;
var image_cache = Array();
var populate_covers_timer = Array();
var FullLibraryList = null;

function populate_with_library_covers(start_items){
	if(start_items == 0){
		FullLibraryList = fb.GetLibraryItems(); start_items = 0;
		gTime_covers = fb.CreateProfiler();
	}
	var current_item = start_items;
	gTime_covers.Reset();
	var total = FullLibraryList.Count;
	while(current_item < total){
		if(current_item < nb_of_covers){
            image_cache[current_item] = utils.GetAlbumArtV2(FullLibraryList[current_item]);
		}
		current_item++;
		//Set a timer to avoid freezing on really big libraries
		if(current_item%250 == 0 && gTime_covers.Time > 100){
			populate_covers_timer[populate_covers_timer.length] = window.SetTimeout(function(){
				window.ClearTimeout(populate_covers_timer[populate_covers_timer.length-1]);
				populate_with_library_covers(current_item);
			}, 25);
			return;
		}
	}
}
populate_with_library_covers(0);

Error message:
Error: Spider Monkey Panel v1.0.4 ({9B3A2903-6468-463C-8579-15BBC1C4738F}) Out of memory: 1020262025/1000000000 bytes

Well, this panel uses up 1GB worth of memory :\
IMO, you should just resize image to smth adequate to reduce RAM usage. But if you really want to use full sized images you can increase maximum allowed heap through advanced settings: Preferences>Advanced>Tools>Spider Monkey Panel>Maximum heap size.

PPS: Maximum heap size is the only safe setting in Advanced settings, I don't recommend changing anything else, since it might impact your panel performance hard in really unexpected ways.

PPPS: The limit is per process, not per panel, so adjust accordingly.

Thanks!
On this code which isn't optimized at all, yes, it uses a lot of memory. But on my real code which is a lot more complicate, it load a smaller version of the covers little by little without freezing foobar, and it uses around 150Mo (for 3000+ albums). On my computer, the increase of ram is completely okey, and i can navigate between albums without any loading time for the covers.
I increased this Maximum heap size, now i don't have crash anymore, but the images are lost between panels, i used to send this array of covers from one panel to another using on_notify_data and a deep clone of the received object, but the resulting images are now... corrupt ? I don't know exactly, but gr.DrawImage() now crash with them (DrawImage failed: Object is not of valid type)
So for the moment, i can't use this new version if i want to keep this cover cache :/

it uses around 150Mo

It uses MUCH more. Images are not stored in your usual memory (i.e. the one that you can see via Task Manager), but rather kernel memory which is not counted towards fb2k memory usage (but counts towards total RAM usage). E.g. when your panel OOM'd the task manager might've displayed smth around 200mb usage in fb2k, but total RAM usage would've been 1.2Gb.

i used to send this array of covers from one panel to another using on_notify_data

You can't do this on SMP, this is engine limitation: see docs for details.

On another note: one of the features that I'm working on might enable the deep clone of some native objects (like GdiImage). So your scenario might be possible in the future.

Then i'll keep the first version of SMP

Well, native object transfer via NotifyOthers was never possible on SMP, so using first version won't help in your case  :\
And I strongly advise against using the first version, since it has a lot of bugs that were fixed in the latest version: CHANGELOG

It is working, i use NotifyOthers() in order to send an array of GdiImage(), and i receive the array with on_notify_data(name,info) using images = iterationCopy(info)
Where iterationCopy is this function
function iterationCopy(src) {   let target = {};   for (let prop in src) {     if (src.hasOwnProperty(prop)) {       target[prop] = src[prop];     }   }   return target; }
Why did it break with the new version, or why did it work with the first one, i don't know, but it work :)

So your scenario might be possible in the future.

Done! Added constructors in the latest version, so your scenario is possible now (you still have to increase heap limit via advanced settings though): you can deep-copy image objects with the following code let copy_img = new GdiBitmap(image_from_notify);.

authors: Ottodix TheQwertiest


text:
Check number of arguments in ttnctl

Resolves #447

Coverage remained the same at 73.7% when pulling 6df670c6b753bfed9591c2fd2ddb4aebe456cb4e on issue/447-ttnctl-arguments into 21c530dcd46c1464d38e474bd5640a4107d2c77d on develop.

authors: coveralls htdvisser

repo: TheThingsNetwork/ttn


text:
Make data easier to consume in bulk

I'll use this bug to collect ideas to make it easier to consume OONI data in bulk.

[ ] Move files under <test_name> directories (e.g. autoclaved/jsonl/web_connectivity/...)
This will allow one to fetch or process a test type without having to go over all the tests. One may list all files, filter, then use that as input. However thousands of filenames as input does not work well with big data tools.
Even if the test_name is under the date directory, that would already be useful (I could process one data at a time). Similarly, the filename prefix could have the test name (it doesn't help to have it in the middle).

[ ] Move files under <country> directories (e.g. autoclaved/jsonl/web_connectivity/IT/...)
This will allow one to fetch or process a test in a country without going over all the data. This would also be in a filename prefix.

[ ] Use a uniform file format with balanced number of measurements. We can have a split file (e.g. measurements-XXXXX-of-01000.jsonl.gz) with about the same number of measurements each.
The grouping by report is not useful to consumers. The mix of json.lz4 and tar.lz4 prevents effective use of big data tools. Furthermore, LZ4 is not well supported, which also prevents the use of many tools.

[ ] Move HTTP bodies to a separate datastore.
Most of the data is HTTP request/response body, which is often not useful for bulk processing. They would live in parallel files instead, maybe with the same index as the measurements to make joining easy (e.g. measurements-01234-of-10000 joins with bodies-01234-of-10000).

Are any of those a low hanging fruit? For example, maybe rename the files to have test name and country as a prefix?

@fortuna I think the first point "Move files under <test_name> directories", is something I think is pretty important to do and it would benefit a larger audience too, but it's not exactly "low hanging fruit".
Currently our data processing pipeline depends quite a bit on having files layed out in a certain way and every measurement for a particular date being inside of the bucket prefix (YYYY-MM-DD), so it's not going to be so simple to change the schema of the already emitted measurements (i.e. the autoclaved).
It's probably going to be easier to add support for another format, such as parquet, and write those in a more comfortable format.

Move files under  directories (e.g. autoclaved/jsonl/web_connectivity/IT/...)

I am not sure this is something we should actually do. I think that in most cases, when you are consuming data in batch, you will actually be interested in having measurements from all the countries and actually our country classification sometimes has bugs (geoip is inaccurate), so we probably don't want to do this.

Use a uniform file format with balanced number of measurements

I think this makes sense for formatting the files of other data formats, though I believe that this file format is also something internally used by the data processing pipeline.
@darkk can probably say more on how hard this actually is.

Move HTTP bodies to a separate datastore

I can see why this is something that would be desirable for certain use cases, but maybe this is better solved by having specific pre-processed slices of the data that don't include fields that are not interesting to a user of that dataset.
As a general note, something to keep in mind is that the autoclaved/ are also the master dataset that our data processing pipeline uses internally. I think that to meet the need of end users, we are probably better off having some other batch export that is designed specifically for end user consumption, rather than trying to adapt the internals of our data processing pipeline the need of end users.
Does this make sense?

test_name prefix
I understand the need for the date buckets. I actually ran into the same issue when trying to figure out how to keep my data in sync. We can keep those, but having a <date_bucket>/<test_name> prefix would be helpful.
Public format
Good to know that autoclaved is your internal format. I agree with you: having a an export to a public format for end users makes sense.
On the body size, one test-agnostic heuristic I use is to trim all strings in the JSON to 1000 bytes. It saves a lot in the body field. Notice that if we had a columnar format, we could potentially just ignore that column, which would be great.
Parquet and friends
It seems parquet supports nested objects in their file format, but the serialization in the parquet, avro and Arrow Python libraries don't, as far as I can tell (at least I couldn't figure out). You'd need to roll out your own coder. The library pyspark seems to support nesting according to this Tutorial.
That would be convenient if you decide to use Spark.
One more thing: for a columnar format we may need to revist the schema. Currently there are fields like "headers", where keys can be arbitrary strings. The formats that require schemas don't like that. All keys must be known.
Instead of:
"headers": {
  "Foo": "foo",
  "Bar": "bar",
}

You'd need to restructure to something like
"headers": {[
  {"name": "Foo", "value": "foo"},
  {"name": "Bar", "value": "bar"},
]}

You wouldn't need to worry about the duplication of the keys because the format removes that for you.
Thanks for the follow up!

maybe this is better solved by having specific pre-processed slices

We're following the same idea in other places. E.g. PostgreSQL has the fields those are "interesting for sure". Maybe it actually makes sense to have a "shaved" version of autoclaved files without HTTP bodies and replacing them with derived values {title, body_length, body_sha256, body_simhash, body_text_simhash}.
HTTP bodies take 97% of lz4-compressed data size, so making the slice of the dataset that is 130 GiB compared to 4200 GiB is something that sounds like both a useful activity and a "low hanging fruit".

That would be helpful. The new metadata DB requires a complicated and fragile setup. I just need a data dump without most of the stuff I don't need.

@FedericoCeratto this is a useful thread to keep in mind.

authors: darkk fortuna hellais

repo: TheTorProject/ooni-pipeline


text:
[quilt 19.2] MaxEthernia noSuch value error occurs after updating past 0.6.1

This is a continuation of #33 to avoid further confusion of the subject at hand since I have made it a uncoerable mess.
Anyhow; I never specifically divulged the bug that was happening;
Whenever I join the world I did say that I got kicked out of it; however, I never stated the error
this is what happens when I use it with my set of mods in (0.6.3) [NOTE: at the time, 0.6.4 will not boot due to a bug; see #37 ]
although I think I found the issue; its throwing a specific error at me when I use it when I use it in 0.6.3

The log produces these 2 things before it boots me
This is the log: https://gist.github.com/Shibva/b396b67f0451fe4e6df77db069b22bf8
Point of Interest
[02:09:07] [Netty Local Client IO #0/ERROR]: Encountered exception while handling in channel with name "zenith:reload_listener_end"
java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:143) ~[?:?]
	at safro.zenith.ench.table.EnchantingStatManager.computeAbsoluteMaxEterna(EnchantingStatManager.java:152) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.ench.table.EnchantingStatManager.onReload(EnchantingStatManager.java:72) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.api.json.ZenithJsonReloadListener.lambda$endSync$6(ZenithJsonReloadListener.java:284) ~[transformed-mod-zenith.i0:0/:?]
	at java.util.HashMap.computeIfPresent(HashMap.java:1261) ~[?:?]
	at safro.zenith.api.json.ZenithJsonReloadListener.endSync(ZenithJsonReloadListener.java:281) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.network.ReloadListenerPacket$End.lambda$init$0(ReloadListenerPacket.java:125) ~[transformed-mod-zenith.i0:0/:?]
	at net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking$PlayChannelHandler.receive(ClientPlayNetworking.java:216) ~[transformed-mod-quilted-fabric-networking-api-v1.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.receive(ClientPlayNetworkAddon.java:100) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.receive(ClientPlayNetworkAddon.java:41) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.AbstractChanneledNetworkAddon.handle(AbstractChanneledNetworkAddon.java:101) [transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.handle(ClientPlayNetworkAddon.java:92) [transformed-mod-quilt-networking.i0:0/:?]
	at net.minecraft.class_634.handler$fde000$quilt_networking$handleCustomPayload(class_634.java:2520) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_634.method_11152(class_634.java) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2658.method_11457(class_2658.java:60) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2658.method_11054(class_2658.java:8) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.method_10759(class_2535.java:167) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.method_10770(class_2535.java:152) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.channelRead0(class_2535.java:50) [transformed-mod-minecraft.i0:0/:?]
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:299) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.finishPeerRead0(LocalChannel.java:445) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:50) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:403) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultEventLoop.run(DefaultEventLoop.java:54) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at java.lang.Thread.run(Thread.java:833) [?:?]
[02:09:07] [Netty Local Client IO #0/ERROR]: Exception occurred in netty pipeline
java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:143) ~[?:?]
	at safro.zenith.ench.table.EnchantingStatManager.computeAbsoluteMaxEterna(EnchantingStatManager.java:152) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.ench.table.EnchantingStatManager.onReload(EnchantingStatManager.java:72) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.api.json.ZenithJsonReloadListener.lambda$endSync$6(ZenithJsonReloadListener.java:284) ~[transformed-mod-zenith.i0:0/:?]
	at java.util.HashMap.computeIfPresent(HashMap.java:1261) ~[?:?]
	at safro.zenith.api.json.ZenithJsonReloadListener.endSync(ZenithJsonReloadListener.java:281) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.network.ReloadListenerPacket$End.lambda$init$0(ReloadListenerPacket.java:125) ~[transformed-mod-zenith.i0:0/:?]
	at net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking$PlayChannelHandler.receive(ClientPlayNetworking.java:216) ~[transformed-mod-quilted-fabric-networking-api-v1.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.receive(ClientPlayNetworkAddon.java:100) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.receive(ClientPlayNetworkAddon.java:41) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.AbstractChanneledNetworkAddon.handle(AbstractChanneledNetworkAddon.java:101) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.handle(ClientPlayNetworkAddon.java:92) ~[transformed-mod-quilt-networking.i0:0/:?]
	at net.minecraft.class_634.handler$fde000$quilt_networking$handleCustomPayload(class_634.java:2520) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_634.method_11152(class_634.java) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2658.method_11457(class_2658.java:60) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2658.method_11054(class_2658.java:8) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.method_10759(class_2535.java:167) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.method_10770(class_2535.java:152) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.channelRead0(class_2535.java:50) ~[transformed-mod-minecraft.i0:0/:?]
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:299) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.finishPeerRead0(LocalChannel.java:445) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:50) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:403) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultEventLoop.run(DefaultEventLoop.java:54) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at java.lang.Thread.run(Thread.java:833) [?:?]

Issue still exists after updating to 0.6.5 on quilt
Error from log:
java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:143) ~[?:?]
	at safro.zenith.ench.table.EnchantingStatManager.computeAbsoluteMaxEterna(EnchantingStatManager.java:152) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.ench.table.EnchantingStatManager.onReload(EnchantingStatManager.java:72) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.api.json.ZenithJsonReloadListener.lambda$endSync$6(ZenithJsonReloadListener.java:284) ~[transformed-mod-zenith.i0:0/:?]
	at java.util.HashMap.computeIfPresent(HashMap.java:1261) ~[?:?]
	at safro.zenith.api.json.ZenithJsonReloadListener.endSync(ZenithJsonReloadListener.java:281) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.network.ReloadListenerPacket$End.lambda$init$0(ReloadListenerPacket.java:125) ~[transformed-mod-zenith.i0:0/:?]
	at net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking$PlayChannelHandler.receive(ClientPlayNetworking.java:216) ~[transformed-mod-quilted-fabric-networking-api-v1.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.receive(ClientPlayNetworkAddon.java:100) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.receive(ClientPlayNetworkAddon.java:41) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.AbstractChanneledNetworkAddon.handle(AbstractChanneledNetworkAddon.java:101) [transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.handle(ClientPlayNetworkAddon.java:92) [transformed-mod-quilt-networking.i0:0/:?]
	at net.minecraft.class_634.handler$ghe000$quilt_networking$handleCustomPayload(class_634.java:2520) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_634.method_11152(class_634.java) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2658.method_11457(class_2658.java:60) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2658.method_11054(class_2658.java:8) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.method_10759(class_2535.java:167) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.method_10770(class_2535.java:152) [transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.channelRead0(class_2535.java:50) [transformed-mod-minecraft.i0:0/:?]
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:299) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.finishPeerRead0(LocalChannel.java:445) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:50) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:403) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultEventLoop.run(DefaultEventLoop.java:54) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at java.lang.Thread.run(Thread.java:833) [?:?]
[02:00:09] [Netty Local Client IO #0/ERROR]: Exception occurred in netty pipeline
java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:143) ~[?:?]
	at safro.zenith.ench.table.EnchantingStatManager.computeAbsoluteMaxEterna(EnchantingStatManager.java:152) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.ench.table.EnchantingStatManager.onReload(EnchantingStatManager.java:72) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.api.json.ZenithJsonReloadListener.lambda$endSync$6(ZenithJsonReloadListener.java:284) ~[transformed-mod-zenith.i0:0/:?]
	at java.util.HashMap.computeIfPresent(HashMap.java:1261) ~[?:?]
	at safro.zenith.api.json.ZenithJsonReloadListener.endSync(ZenithJsonReloadListener.java:281) ~[transformed-mod-zenith.i0:0/:?]
	at safro.zenith.network.ReloadListenerPacket$End.lambda$init$0(ReloadListenerPacket.java:125) ~[transformed-mod-zenith.i0:0/:?]
	at net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking$PlayChannelHandler.receive(ClientPlayNetworking.java:216) ~[transformed-mod-quilted-fabric-networking-api-v1.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.receive(ClientPlayNetworkAddon.java:100) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.receive(ClientPlayNetworkAddon.java:41) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.AbstractChanneledNetworkAddon.handle(AbstractChanneledNetworkAddon.java:101) ~[transformed-mod-quilt-networking.i0:0/:?]
	at org.quiltmc.qsl.networking.impl.client.ClientPlayNetworkAddon.handle(ClientPlayNetworkAddon.java:92) ~[transformed-mod-quilt-networking.i0:0/:?]
	at net.minecraft.class_634.handler$ghe000$quilt_networking$handleCustomPayload(class_634.java:2520) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_634.method_11152(class_634.java) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2658.method_11457(class_2658.java:60) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2658.method_11054(class_2658.java:8) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.method_10759(class_2535.java:167) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.method_10770(class_2535.java:152) ~[transformed-mod-minecraft.i0:0/:?]
	at net.minecraft.class_2535.channelRead0(class_2535.java:50) ~[transformed-mod-minecraft.i0:0/:?]
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:299) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.doBeginRead(LocalChannel.java:322) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.beginRead(AbstractChannel.java:834) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannel.read(AbstractChannel.java:290) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelReadComplete(DefaultChannelPipeline.java:1417) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:410) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelReadComplete(AbstractChannelHandlerContext.java:397) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:925) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.readInbound(LocalChannel.java:302) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.finishPeerRead0(LocalChannel.java:445) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:50) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:403) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.channel.DefaultEventLoop.run(DefaultEventLoop.java:54) [netty-transport-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.77.Final.jar:4.1.77.Final]
	at java.lang.Thread.run(Thread.java:833) [?:?]```

Taking a quick look at the log, it seems to be an issue with the reload listener, packets aren't being sent for some reason I think, making the enchantment stats not sync.
Looking at it, seems like quilt might have different handling for packets to some extent, but it's hard for me to say without taking a good hard look at it (which quite frankly I don't have the motivation to do so atm, I've been too busy with planning irl pride stuff this month)

It's a bit strange, considering this was working before hand when I was using 6.1.
For context, this started after I updated the 6.2 and is still going on after the hot fix for 6.5.

Have ran into the same issue, stacktrace points to this function
private void computeAbsoluteMaxEterna() {
    this.absoluteMaxEterna = this.registry.values().stream().max(Comparator.comparingDouble(s -> s.stats.maxEterna)).get().stats.maxEterna;
                                                                                ^ here
}

Can confirm it's a non issue on 6.1 but an issue on following versions

Not really supporting 1.19 anymore

Well, that's one way to fix an issue, ignore it until the version is no longer supported lol (not saying it's what you did, but funny nonetheless)

Well quilt support is kind of just a nice to have for me, not going to sink a bunch of dev time into it

as you should, it's YOUR project and it's open source.

authors: EzequielDM Shibva TheWinABagel

repo: TheWinABagel/Zenith


text:
Does not work on Windows 2008 R2 without SP1

The OS version of Windows 2008 R1 SP1 is 6.1.7601, donut works great from this version to latest Windows 2019. But on OS slightly older, it just won't run.
Environment

Windows 2008 R2 without SP1, no patch installed, aka 6.1.7600
donut 0.9.3 (master branch, built today)

Problem

shellcode is executed but .NET code does not run

Steps to reproduce the issue
Download lib.txt and rename it to lib1.cs, compile with:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc -target:library lib1.cs

Create shellcode
%> donut-master\donut.exe -c Lib1.Class1 -m Test lib.dll

  [ Donut shellcode generator v0.9.3
  [ Copyright (c) 2019 TheWover, Odzhan

  [ Instance type : Embedded
  [ Module file   : "lib.dll"
  [ Entropy       : Random names + Encryption
  [ File type     : .NET DLL
  [ Class         : Lib1.Class1
  [ Method        : Test
  [ Target CPU    : x86+amd64
  [ AMSI/WDLP     : continue
  [ Shellcode     : "loader.bin"

Create header from loader.bin
xxd -i loader.bin > loader.h

Create main.c
#include <windows.h>
#include "loader.h"

int main(int argc, char **argv)
{
	LPVOID *buffer = VirtualAlloc(NULL, sizeof(loader_bin), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	memcpy(buffer, loader_bin, loader_bin_len);

	HANDLE hThread = (void*) _beginthread((void (*) (void*))buffer, 0, 0);
	WaitForSingleObject (hThread, -1);

	return 0;
}

Run on Windows 2008 R2 (No SP1), shellcode runs but no effect; Run on any other OS (2008 SP1, 2012 - 2019) with .NET 3.5 enabled, it works.
What I have tried
I tried to build the loader in debug mode, but DPRINT seem to use msvcrt API instead of  OutputDebugString, so it won't work as shellcode unless you resolve the hash for it.
While fixing this issue, can you also make the loader "debuggable"? The Makefile.msvc is also weird, it only build the loader in release mode.

So far, it looks the loader exited instead of crashing, no access violation is observed.

Looks like you have a injector in the repo, I tried to inject into calculator:

No thread created:

Unfortunately I don't have a copy of Windows 2008 to test on, but what I would like to know is if this is a 32 or 64-bit build of 2008? Makefile.msvc and Makefile.mingw both support building debug versions of the loader for x64 versions of Windows. For 32-bit, you would need to change the Makefile to use aplib32.lib or aplib32.a depending on the compiler used. In most cases, the debug build should display any errors encountered when attempting to load and execute a file.

Build a .NET EXE and try run it on Windows 2008 6.1.7600, does it work?
Build the debug version of loader, copy the instance and loader to Windows 2008 and try run it, what output is displayed?

Read 12. Debugging The Generator and Loader

Weird, Failed to resolve CreateThread?
C:\Users\Administrator\Desktop>loader loader.bin
Running...
DEBUG: loader/loader.c:47:DonutLoader(): Resolving address of CreateThread
DEBUG: loader/loader.c:57:DonutLoader(): FAILED

Full output: output.txt
FYI: I'm uploading en_windows_server_2008_r2_standard_enterprise_datacenter_web_retail_x64_dvd_x15-50365.iso for testing, you can install a VM after that.

Use the instance created by the generator. You are using the shellcode.

I have uploaded the installer ISO here:
hxxp://27.102.67.44/en_windows_server_2008_r2_standard_enterprise_datacenter_web_retail_x64_dvd_x15-50365.iso

Here's what I've tried:
Add Main method to lib.cs and make it a executeable, confirm it can run.
In peb.c add debug output:
    {
      // search the export table for api
      addr = FindExport(inst, dte->DllBase, ulHash, ulIV);
      DPRINT("FindExport of %016: %p", ulHash, addr);
    }

But the hash computed is different from loader:
c:\donut-master>donut lib.exe
...
DEBUG: donut.c:909:build_instance(): Hash for kernel32.dll    : CreateThread       = 12EAA7867FE6A9B5
...

c:\donut-master>loader loader.bin
Running...
DEBUG: loader/loader.c:47:DonutLoader(): Resolving address of CreateThread
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: peb.c:142:xGetProcAddress(): FindExport of : E6A9B5EB6E1B85D2
DEBUG: loader/loader.c:57:DonutLoader(): FAILED

I've tried the exactly same step on Window 8, Windows 2012 and Windows 2008 R2 (No SP1), same result, but the injector works on Windows 8 and Windows 2012, so the loader itself seems buggy.

The hash for CreateThread doesn't match because you're not using the 'instance' file created by the debug version. Try "loader instance" instead of "loader loader.bin"

Found the problem:
DEBUG: donut.c:909:build_instance(): Hash for mscoree.dll     : CLRCreateInstance      = D3A05213209196AC

So Windows 2008 R2 uses deprecated ClrCreateManagedInstance

Thank you for the report. It will be fixed in v1.0.

I've patched donut and disabled RtlDecompressBufferEx, installed NET Framework 3.5 SP1 Update for Windows 7 and Windows Server 2008 R2 for x64-based Systems (KB982526) and it worked for now.

I also encountered the same problem. This problem not only occurs in PE compiled by C#, but also in PE compiled by C

@funnywolf mixed assemblies?

@CaledoniaProject Updated loader.c to continue execution if CLRCreateInstance isn't available. It's only a temporary fix for now. Will likely be changed again for v1.0. Also using RtlDecompressBuffer instead of RtlDecompressBufferEx which means Xpress Huffman is no longer an option. Compression for v1.0 will be much different. Thanks for testing.

Confirmed to work on Windows 2008 R2 SP0, when KB982526 is not installed :-)

authors: CaledoniaProject FunnyWolf odzhan

repo: TheWover/donut